]> git.localhorst.tv Git - blank.git/blobdiff - src/generator.cpp
minor optimizations in chunk
[blank.git] / src / generator.cpp
index 43d932cceae421473bc391820370c36dccc1fac7..3d61b75a748f1d793f4e61048978f47cc35b9cce 100644 (file)
@@ -5,10 +5,10 @@
 
 namespace blank {
 
-Generator::Generator(const Config &config)
+Generator::Generator(const Config &config) noexcept
 : solidNoise(config.solid_seed)
 , typeNoise(config.type_seed)
-, stretch(config.stretch)
+, stretch(1.0f/config.stretch)
 , solid_threshold(config.solid_threshold)
 , space(0)
 , light(0)
@@ -17,16 +17,15 @@ Generator::Generator(const Config &config)
 }
 
 
-void Generator::operator ()(Chunk &chunk) const {
-       chunk.Allocate();
+void Generator::operator ()(Chunk &chunk) const noexcept {
        Chunk::Pos pos(chunk.Position());
        glm::vec3 coords(pos * Chunk::Extent());
-       for (int z = 0; z < Chunk::Depth(); ++z) {
-               for (int y = 0; y < Chunk::Height(); ++y) {
-                       for (int x = 0; x < Chunk::Width(); ++x) {
+       for (int z = 0; z < Chunk::depth; ++z) {
+               for (int y = 0; y < Chunk::height; ++y) {
+                       for (int x = 0; x < Chunk::width; ++x) {
                                Block::Pos block_pos(x, y, z);
-                               glm::vec3 gen_pos = (coords + block_pos) / stretch;
-                               float val = solidNoise(gen_pos);
+                               glm::vec3 gen_pos = (coords + block_pos) * stretch;
+                               float val = OctaveNoise(solidNoise, coords + block_pos, 3, 0.5f, stretch, 2.0f);
                                if (val > solid_threshold) {
                                        int type_val = int((typeNoise(gen_pos) + 1.0f) * solids.size()) % solids.size();
                                        chunk.SetBlock(block_pos, Block(solids[type_val]));
@@ -37,7 +36,7 @@ void Generator::operator ()(Chunk &chunk) const {
                }
        }
        unsigned int random = 263167 * pos.x + 2097593 * pos.y + 426389 * pos.z;
-       for (int index = 0; index < Chunk::Size(); ++index) {
+       for (int index = 0; index < Chunk::size; ++index) {
                if (chunk.IsSurface(index)) {
                        random = random * 666649 + 7778777;
                        if ((random % 32) == 0) {