Beispiel #1
0
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();
}
Beispiel #2
0
	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;	
	}
Beispiel #3
0
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;
  }
}