]> git.localhorst.tv Git - blank.git/blobdiff - src/generator.cpp
fixed light propagation
[blank.git] / src / generator.cpp
index 60708e021a01c93751b1aa767963cc3add0c4d57..43d932cceae421473bc391820370c36dccc1fac7 100644 (file)
@@ -5,11 +5,13 @@
 
 namespace blank {
 
-Generator::Generator(unsigned int seed)
-: solidNoise(seed)
-, typeNoise(seed + 1)
-, stretch(64.0f)
-, solid_threshold(0.8f)
+Generator::Generator(const Config &config)
+: solidNoise(config.solid_seed)
+, typeNoise(config.type_seed)
+, stretch(config.stretch)
+, solid_threshold(config.solid_threshold)
+, space(0)
+, light(0)
 , solids() {
 
 }
@@ -27,11 +29,22 @@ void Generator::operator ()(Chunk &chunk) const {
                                float val = solidNoise(gen_pos);
                                if (val > solid_threshold) {
                                        int type_val = int((typeNoise(gen_pos) + 1.0f) * solids.size()) % solids.size();
-                                       chunk.BlockAt(block_pos) = Block(solids[type_val]);
+                                       chunk.SetBlock(block_pos, Block(solids[type_val]));
+                               } else {
+                                       chunk.SetBlock(block_pos, Block(space));
                                }
                        }
                }
        }
+       unsigned int random = 263167 * pos.x + 2097593 * pos.y + 426389 * pos.z;
+       for (int index = 0; index < Chunk::Size(); ++index) {
+               if (chunk.IsSurface(index)) {
+                       random = random * 666649 + 7778777;
+                       if ((random % 32) == 0) {
+                               chunk.SetBlock(index, Block(light));
+                       }
+               }
+       }
        chunk.Invalidate();
        chunk.CheckUpdate();
 }