#include "house_generator.h" #include #include #include "../renderEngine/obj_loader.h" #include "../renderEngine/Loader.h" #include "../toolbox/toolbox.h" #include "collision_entity.h" namespace entities { HouseGenerator::HouseGenerator() { models::RawModel raw_model = render_engine::LoadObjModel("res/HouseNew.obj"); default_texture = { render_engine::loader::LoadTexture("res/Texture.png") }; default_texture.shine_damper = 10; house_model = { raw_model, default_texture }; GenerateFurnitureModels(); } std::deque> HouseGenerator::GenerateHouse(const glm::vec3& position, float y_rotation) { std::deque> furniture; // Add house furniture.push_front(std::make_shared(house_model, position, glm::vec3(0, y_rotation, 0), HOUSE_SIZE)); // Add furniture models::TexturedModel couch = GetFurnitureModel(FurnitureType::COUCH); glm::vec3 couch_pos = glm::vec3(position.x + 200, position.y, position.z + 10); collision::Box couch_box = { couch_pos, couch.raw_model.model_size }; couch_box.SetRotation(-90); furniture.push_back(std::make_shared(couch, couch_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, couch_box)); models::TexturedModel table = GetFurnitureModel(FurnitureType::TABLE); glm::vec3 table_pos = glm::vec3(position.x - 30, position.y, position.z); collision::Box table_box = { table_pos, table.raw_model.model_size }; furniture.push_back(std::make_shared(table, table_pos, glm::vec3(0, 0, 0), HOUSE_SIZE * 1.3, table_box)); models::TexturedModel chair = GetFurnitureModel(FurnitureType::CHAIR); glm::vec3 chair_pos = glm::vec3(position.x - 50, position.y, position.z + 220); collision::Box chair_box = { chair_pos, chair.raw_model.model_size }; furniture.push_back(std::make_shared(chair, chair_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, chair_box)); return furniture; } models::TexturedModel HouseGenerator::GetFurnitureModel(FurnitureType furniture) { const auto found = furniture_models.find(furniture); if (found == furniture_models.end()) { std::cerr << "OH NEEEEEEEEEEEEEEE"; } auto models = found->second; const int modelNumber = toolbox::Random(0, models.size() - 1); return models[modelNumber]; } void HouseGenerator::GenerateFurnitureModels() { // Couches std::deque couches; models::RawModel couch_inside_model = render_engine::LoadObjModel("res/couchThree.obj"); models::TexturedModel couch_inside = { couch_inside_model, default_texture }; couches.push_back(couch_inside); models::RawModel couch_inside_model2 = render_engine::LoadObjModel("res/Coach.obj"); models::TexturedModel couch_inside2 = { couch_inside_model2, default_texture }; couches.push_back(couch_inside2); models::RawModel couch_inside_model3 = render_engine::LoadObjModel("res/lawnBenchOne.obj"); models::TexturedModel couch_inside3 = { couch_inside_model3, default_texture }; couches.push_back(couch_inside3); furniture_models.insert(std::pair>(FurnitureType::COUCH, couches)); // Tables std::deque tables; models::RawModel table_model1 = render_engine::LoadObjModel("res/tableOne.obj"); models::TexturedModel table1 = { table_model1, default_texture }; tables.push_back(table1); models::RawModel table_model2 = render_engine::LoadObjModel("res/tableTwo.obj"); models::TexturedModel table2 = { table_model2, default_texture }; tables.push_back(table2); furniture_models.insert(std::pair>(FurnitureType::TABLE, tables)); // Chairs std::deque chairs; models::RawModel chair_model1 = render_engine::LoadObjModel("res/launchchair.obj"); models::TexturedModel chair1 = { chair_model1, default_texture }; chairs.push_back(chair1); models::RawModel chair_model2 = render_engine::LoadObjModel("res/lawnChairOne.obj"); models::TexturedModel chair2 = { chair_model2, default_texture }; chairs.push_back(chair2); models::RawModel chair_model3 = render_engine::LoadObjModel("res/ugly_chair.obj"); models::TexturedModel chair3 = { chair_model3, default_texture }; chairs.push_back(chair3); // Plants furniture_models.insert(std::pair>(FurnitureType::CHAIR, chairs)); } }