Example #1
0
void generateBuildings (Context& context,
                        std::vector<BuildingSeed>& seeds,
                        std::vector<Cuboid>& houses) {
    for (std::vector<BuildingSeed>::iterator it = seeds.begin();
         it != seeds.end();
         it++) {
        BuildingSeed & bs = *it;

        glm::vec2 road = bs.closest_road_point;
        glm::vec2 u = glm::normalize(road - bs.location);
        glm::vec3 pos = glm::vec3(bs.location.x, context.terrain->getHeight(bs.location), bs.location.y);
        CoordSystem cs = CoordSystem::fromVectors(pos,
                                                  glm::vec3(u.x, 0, u.y),
                                                  glm::vec3(-u.y, 0, u.x));
        /* float alpha = zHouse / 2; */
        /* cs.position = pos - alpha * glm::vec3(u.x, 0, u.y); */
        cs.position = pos;
        glm::vec3 dimensions(xHouse, yHouse, zHouse);
        Cuboid maison(cs, dimensions);
        Rectangle2D house(cs, dimensions.x, dimensions.z);

        bool inserted = true;

        // Collision muraille / maison
        if (intersect_rect_poly(context,
                                house,
                                context.strongholds[context.currentStronghold].base)) {
            inserted = false;
        }

        // Collisions entre maisons
        for (int i = 0; i < houses.size(); i++) {
            Rectangle2D house2(houses[i].getCoordSystem(),
                               houses[i].dimensions.x,
                               houses[i].dimensions.z);
            if (intersect_houses(house, house2)) {
                inserted = false;
                break;
            }
        }

        if (inserted) {
            houses.push_back(maison);
        }
    }
}
void sean4()
{
int i;
randomize();
house2(66,-50,random(100),random(100));
house2(62,1,random(100),random(100));
house2(65,150,random(100),random(100));
house2(67,300,random(100),random(100));

house2(502,10,random(100),random(100));
house2(505,220,random(100),random(100));

for(i=0;i<500;i+=100)
streetlight(165,i);

for(i=0;i<500;i+=100)
streetlight1(473,i);

for(i=0;i<500;i+=180)
stop(145,i);

for(i=60;i<500;i+=180)
stop(485,i);
}
TEST_F(SimulatorTest, spreadFireShop){
	Shop shop(Point(3, 5), Size(2, 2), 20, 20); // First burning shop
	House house1(Point(1, 3), 20);
	House house2(Point(1, 5), 20);
	House house3(Point(1, 7), 20);
	House house4(Point(3, 3), 20);
	House house5(Point(3, 7), 20);
	House house6(Point(5, 3), 20);
	House house7(Point(5, 5), 20);
	House house8(Point(5, 7), 20);

	Street horizontalDown("Horizontaldown", Point(0, 0), Point(8, 0));
	Street horizontalUp("Horizontalup", Point(0, 8), Point(8, 8));
	Street verticalLeft("verticalLeft", Point(0, 0), Point(0, 8));
	Street verticalRight("verticalRigth", Point(8, 0), Point(8, 8));

	EXPECT_TRUE(ptrCity->add(horizontalDown));
	EXPECT_TRUE(ptrCity->add(horizontalUp));
	EXPECT_TRUE(ptrCity->add(verticalLeft));
	EXPECT_TRUE(ptrCity->add(verticalRight));

	EXPECT_TRUE(ptrCity->add(shop));
	EXPECT_TRUE(ptrCity->add(house1));
	EXPECT_TRUE(ptrCity->add(house2));
	EXPECT_TRUE(ptrCity->add(house3));
	EXPECT_TRUE(ptrCity->add(house4));
	EXPECT_TRUE(ptrCity->add(house5));
	EXPECT_TRUE(ptrCity->add(house6));
	EXPECT_TRUE(ptrCity->add(house7));
	EXPECT_TRUE(ptrCity->add(house8));

	Simulator sim(ptrCity, ptrOutput);

	std::vector<House*> houses = ptrCity->getHouses();
	std::vector<House*>::iterator it;

	// Set first house on fire
	ptrCity->getShops()[0]->setFire();
	ptrOutput->step();

	// Count houses on fire
	int counter = 0;

	counter = 0;
	for(it = houses.begin();it != houses.end();it++){
		if((*it)->isBurning()){
			counter++;
		}
	}

	EXPECT_EQ(counter, 0);

	sim.burningDown();
	ptrOutput->step();
	sim.burningDown();
	ptrOutput->step();
	sim.burningDown();
	sim.spreadFire();
	ptrOutput->step();

	counter = 0;
	for(it = houses.begin();it != houses.end();it++){
		if((*it)->isBurning()){
			counter++;
		}
	}

	EXPECT_EQ(counter, 2);

	sim.spreadFire();
	sim.burningDown();
	ptrOutput->step();

	counter = 0;
	for(it = houses.begin();it != houses.end();it++){
		if((*it)->isBurning()){
			counter++;
		}
	}

	EXPECT_EQ(counter, 4);
}