void createRandomBlock(BlockInfo& block, double size[3], double location[3]) { block.initalized = true; block.size[0] = size[0]; block.size[1] = size[1]; block.size[2] = size[2]; block.location[0] = location[0]; block.location[1] = location[1]; block.location[2] = location[2]; int numOfTrees = rand() % 10; for(int ii = 0; ii < numOfTrees; ii++) { block.trees.push_back(TreeInfo(rand()%100/25.0 + 4, // Width rand()%100/50.0 + 3, // Height rand()%100/5.0 - 10, rand()%100/5.0 - 10, 0)); } int numOfRocks = rand() % 5 - 2 ; // More likely to not draw rocks //block.rocks.push_back(RockInfo(0, -8.5, 0, 3.5, 1.5, 3, 15)); for(int ii = 0; ii < numOfRocks; ii++) { block.rocks.push_back(RockInfo(rand()%100/5.0 - 10, // X rand()%100/5.0 - 10, // Y -.5, //Z rand()%100/25.0 + 1, // Width rand()%100/50.0 + 2, // Height rand()%100/50.0 + 1, // depth 15)); } int numOfHouses = rand() % 15 - 13; for(int ii = 0; ii < numOfHouses; ii++) { block.houses.push_back(HouseInfo(rand()%100/5.0 - 10, // X, rand()%100/5.0 - 10, // Y 0, // Z rand()%2 + 3, rand()%2 + 3, rand()%3 + 44, rand() %360)); } block.maxHeight = 10; block.randomSeed = rand(); }
virtual bool objectEnd(const std::string &name) { if(otype.empty()) return false; switch(otype.back()) { case OT_RACES: new Genus(color, grow, 1.0f / strength, linkFactor, 4.0f, 0.2f, 0.85f, 0.3f, PI/6.0f, 0.3f, 0.02f, 1.5f, 0.2f, PI/6.0f, 0.3f); return true; case OT_PLANET: { Planet *p = new Planet(position, radius, rich); world.addPlanet(p); if(!trees.empty()) { float sizeSum = 0; for(std::vector<TreeInfo>::iterator it = trees.begin(); it!=trees.end(); ++it) sizeSum += it->size; if(sizeSum > 1.0) { float factor = 1.0f / sizeSum; for(std::vector<TreeInfo>::iterator it = trees.begin(); it!=trees.end(); ++it) it->size *= factor; } for(std::vector<TreeInfo>::iterator it = trees.begin(); it!=trees.end(); ++it) if(it->race < (int)genuses.size()) Tree::build(genuses[it->race], p, it->size*p->getMaxLength(), it->dir); } } return true; case OT_BLACK_HOLE: { BlackHole *b = new BlackHole(position, radius); } return true; case OT_TREES: trees.push_back(TreeInfo(race, size, dir)); return true; } return false; }
void initStaticBlocks() { if(!blocks[0][0].initalized) { //Create Initial Blocks; BlockInfo& block = blocks[0][0]; block.size[0] = BLOCK_SIZE; block.size[1] = BLOCK_SIZE; block.size[2] = BLOCK_SIZE_Z; block.location[0] = 0; block.location[1] = 0; block.location[2] = 0; block.randomSeed = rand(); block.trees.push_back(TreeInfo(6, 3, 0, 0, 0)); block.trees.push_back(TreeInfo(6, 3, 3, 4, 0)); block.trees.push_back(TreeInfo(5.6, 3, 2, 6, 0)); block.trees.push_back(TreeInfo(5.1, 2.4, 6, 7, 0)); block.trees.push_back(TreeInfo(8, 2.8, -4, 3, 0)); block.trees.push_back(TreeInfo(7, .8, -8, 7, 0)); block.trees.push_back(TreeInfo(2.5, 4.0, -7, 1, 0)); block.trees.push_back(TreeInfo(6, 5.0, -3, -4, 0)); block.trees.push_back(TreeInfo(9, 7, -9, -9, 0)); block.trees.push_back(TreeInfo(5.0, 3.5, 6, -4, 0)); block.trees.push_back(TreeInfo(6.6, 4, 8, -7, 0)); block.rocks.push_back(RockInfo(0, -8.5, 0, 3.5, 1.5, 3, 15)); block.rocks.push_back(RockInfo(0, -7.5, -1, 1.5, 1.5, 2, 10)); block.maxHeight = 9; // FromTree block.initalized = true; } if (!blocks[0][1].initalized) { BlockInfo& block = blocks[0][1]; block.size[0] = BLOCK_SIZE; block.size[1] = BLOCK_SIZE; block.size[2] = BLOCK_SIZE_Z; block.location[0] = 0; block.location[1] = BLOCK_SIZE; block.location[2] = 0; block.randomSeed = rand(); block.trees.push_back(TreeInfo(7, 3.6, 6, -4, 0)); block.trees.push_back(TreeInfo(4.5, 4.0, 8, -7, 0)); block.trees.push_back(TreeInfo(6, 4.5, -8, 7, 0)); block.rocks.push_back(RockInfo(-4, 5, -.1, 1, 2, 1, 10)); block.rocks.push_back(RockInfo(-5, 1, -.1, 1, 3, 2, 10)); block.houses.push_back(HouseInfo(2.5, 2.5, 0, 5, 4, 4, 0)); block.maxHeight = 10;//From House block.initalized = true; } }