added simple random map generation
authornireco
Thu, 20 Nov 2008 17:14:59 +0000
changeset 75 f2c79f2d9384
parent 74 279788e460fd
child 76 577f248b03b4
added simple random map generation
src/proto2/Physics.cc
src/proto2/Physics.hh
--- a/src/proto2/Physics.cc	Thu Nov 20 16:28:05 2008 +0000
+++ b/src/proto2/Physics.cc	Thu Nov 20 17:14:59 2008 +0000
@@ -6,7 +6,7 @@
 #include <functional>
 
 PhysicsWorld::PhysicsWorld (Vector gravity, Vector dimensions)
-    : tick_timer(PHYSICS_TICK_MS), gravity(gravity), dimensions(dimensions) {
+    : tick_timer(PHYSICS_TICK_MS), gravity(gravity), dimensions(dimensions), terrain(dimensions.x, std::vector<TerrainType>(dimensions.y, DIRT) {
 
     slots.connect(tick_timer.sig_timer(), this, &PhysicsWorld::tick);
     tick_timer.enable();
@@ -135,3 +135,40 @@
     this->updatePosition();
 }
 
+/**
+ * simple random map generation
+ * first fills whole level with dirt
+ * then randomizes circles of empty or rock
+ * @param seed - seed number for random number generator
+ */
+void generateTerrain(int seed) {
+    // generating should use own random number generator, but didn't find easily how that is done
+    srand(seed);
+    
+    // some constants to control random generation
+    const int min_range = 10;
+    const int max_range = 40;
+    const int num = 30;
+    const int rock_rarity = 4; // 1 / rock_rarity will be rock circle
+
+    // loops for amount of circles
+    for(int i = 0; i < num; i++) {
+        // information of new circle
+        int midx = rand()%dimensions.x;
+        int midy = rand()%dimensions.y;
+        int range = rand()%(max_range-min_range)+min_range;
+        TerrainType type = EMPTY;
+        if(rand()%rock_rarity == 0) {
+            type = ROCK;
+        }
+        // loops for every pixel of circle
+        for(int x = max(0, midx-range); x < min(dimensions.x, midx+range); x++) {
+            for(int y = max(0, midy-range); y < min(dimensions.y, midy+range); y++) {
+                if(x*x+y*y < range*range) {
+                    // and sets it to type
+                    terrain[x][y] = type;
+                }
+            }
+        }
+    }
+}
--- a/src/proto2/Physics.hh	Thu Nov 20 16:28:05 2008 +0000
+++ b/src/proto2/Physics.hh	Thu Nov 20 17:14:59 2008 +0000
@@ -22,7 +22,7 @@
 protected:
     std::vector<PhysicsObject*> objects;
     Vector gravity;
-    Vector dimensions;
+    Vector dimensions; //const requested
     
     std::vector<std::vector<TerrainType> > terrain;