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); }