# HG changeset patch # User nireco # Date 1227201299 0 # Node ID f2c79f2d9384f4fb5a3b798fefe61b08bc9aaac5 # Parent 279788e460fd9fe0bda3866267c57a90f7dcbc65 added simple random map generation diff -r 279788e460fd -r f2c79f2d9384 src/proto2/Physics.cc --- 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 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(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; + } + } + } + } +} diff -r 279788e460fd -r f2c79f2d9384 src/proto2/Physics.hh --- 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 objects; Vector gravity; - Vector dimensions; + Vector dimensions; //const requested std::vector > terrain;