diff --git a/src/entities/house_generator.cpp b/src/entities/house_generator.cpp index c589338..4e0e49f 100644 --- a/src/entities/house_generator.cpp +++ b/src/entities/house_generator.cpp @@ -12,56 +12,55 @@ 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(); } - const FurniturePiece* HouseGenerator::GetRandomFurniturePiece() + void HouseGenerator::GetRandomFurniturePiece(singleton::FurniturePiece* furniture_piece) { - FurnitureType random_type = FurnitureType::CEILING_OBJECTS; - while (random_type == FurnitureType::CEILING_OBJECTS ) { - random_type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1)); + singleton::FurnitureType random_type = singleton::FurnitureType::CEILING_OBJECTS; + std::deque furniture_models = singleton::Model_Storage::get_instance()->get_all_furniture_models(); + + while (random_type == singleton::FurnitureType::CEILING_OBJECTS ) { + random_type = singleton::FurnitureType(toolbox::Random(0, furniture_models.size() - 1)); } - for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + for (auto it = furniture_models.begin(); it != furniture_models.end(); ++it) { if (it->furniture.type == random_type) { - return &it->furniture; + furniture_piece->type = it->furniture.type; + furniture_piece->size = it->furniture.size; + break; } } - - return nullptr; + } - const FurniturePiece* HouseGenerator::GetFurniturePiece(FurnitureType type) + void HouseGenerator::GetFurniturePiece(singleton::FurnitureType type, singleton::FurniturePiece* furniture_piece) { - for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + std::deque furniture_models = singleton::Model_Storage::get_instance()->get_all_furniture_models(); + for (auto it = furniture_models.begin(); it != furniture_models.end(); ++it) { if (it->furniture.type == type) { - return &it->furniture; + furniture_piece->type = it->furniture.type; + furniture_piece->size = it->furniture.size; + break; } } - return nullptr; } - std::deque> HouseGenerator::GenerateHouse(const glm::vec3& position, float y_rotation) + void HouseGenerator::GenerateHouse(std::deque>* furniture_list , 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)); - int house_size_x = house_model.raw_model.model_size.x * HOUSE_SIZE; - int house_size_y = house_model.raw_model.model_size.x * HOUSE_SIZE; - int house_size_z = house_model.raw_model.model_size.x * HOUSE_SIZE; + furniture_list->push_front(std::make_shared(singleton::Model_Storage::get_instance()->get_house_model(), position, glm::vec3(0, y_rotation, 0), HOUSE_SIZE)); + int house_size_x = singleton::Model_Storage::get_instance()->get_house_model().raw_model.model_size.x * HOUSE_SIZE; + int house_size_y = singleton::Model_Storage::get_instance()->get_house_model().raw_model.model_size.x * HOUSE_SIZE; + int house_size_z = singleton::Model_Storage::get_instance()->get_house_model().raw_model.model_size.x * HOUSE_SIZE; - int offset_x = house_model.raw_model.model_size.z * (HOUSE_SIZE / 2); - int offset_z = house_model.raw_model.model_size.x * (HOUSE_SIZE / 2); + int offset_x = singleton::Model_Storage::get_instance()->get_house_model().raw_model.model_size.z * (HOUSE_SIZE / 2); + int offset_z = singleton::Model_Storage::get_instance()->get_house_model().raw_model.model_size.x * (HOUSE_SIZE / 2); double multiplier_x = house_size_x / 4; double multiplier_z = house_size_z / 3; @@ -69,298 +68,63 @@ namespace entities for (int x = 1; x < 4; x++) { //if (toolbox::Random(0, 100) < 90) { - const FurniturePiece* furniture_piece = GetRandomFurniturePiece(); - if (furniture_piece->type != FurnitureType::CEILING_OBJECTS) { - models::TexturedModel model = GetFurnitureModel(furniture_piece); - //if (!(furniture_piece->size > 1 && x > 1)) { - glm::vec3 model_pos = glm::vec3(position.x + (x * multiplier_x) - (multiplier_x / 2) - offset_x, position.y, position.z + (z * multiplier_z) - (multiplier_z / 2) + offset_z); + singleton::FurniturePiece furniture_piece; + GetRandomFurniturePiece(&furniture_piece); + if (furniture_piece.type != singleton::FurnitureType::CEILING_OBJECTS) { + std::cout << "Furniture Piece: " << int(furniture_piece.type) << std::endl; + models::TexturedModel model = GetFurnitureModel(&furniture_piece); + //if (!(furniture_piece->size > 1 && x > 1)) { + glm::vec3 model_pos = glm::vec3(position.x + (x * multiplier_x) - (multiplier_x / 2) - offset_x, position.y, position.z + (z * multiplier_z) - (multiplier_z / 2) + offset_z); - collision::Box model_box = { model_pos, model.raw_model.model_size }; - model_box.SetRotation(-90); - furniture.push_back(std::make_shared(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE, model_box)); - } - //} + collision::Box model_box = { model_pos, model.raw_model.model_size }; + model_box.SetRotation(-90); + furniture_list->push_back(std::make_shared(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE, model_box)); + } //} + //} } } - models::TexturedModel model = GetFurnitureModel(GetFurniturePiece(FurnitureType::CEILING_OBJECTS)); - glm::vec3 model_pos = glm::vec3(position.x, position.y + (house_size_y/5 *3), position.z); + singleton::FurniturePiece furniture_piece; + GetFurniturePiece(singleton::FurnitureType::CEILING_OBJECTS, &furniture_piece); + models::TexturedModel model = GetFurnitureModel(&furniture_piece); + glm::vec3 model_pos = glm::vec3(position.x, position.y + (house_size_y / 5 * 3), position.z); collision::Box model_box = { model_pos, model.raw_model.model_size }; model_box.SetRotation(-90); - furniture.push_back(std::make_shared(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE, model_box)); - - return furniture; - - /* - // 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)); - - models::TexturedModel plant = GetFurnitureModel(FurnitureType::PLANT); - glm::vec3 plant_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box plant_box = { plant_pos, plant.raw_model.model_size }; - furniture.push_back(std::make_shared(plant, plant_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, plant_box)); - - models::TexturedModel guitar = GetFurnitureModel(FurnitureType::GUITAR); - glm::vec3 guitar_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box guitar_box = { guitar_pos, guitar.raw_model.model_size }; - furniture.push_back(std::make_shared(guitar, guitar_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, guitar_box)); - - models::TexturedModel bookshelf = GetFurnitureModel(FurnitureType::BOOKSHELF); - glm::vec3 bookshelf_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box bookshelf_box = { bookshelf_pos, bookshelf.raw_model.model_size }; - furniture.push_back(std::make_shared(bookshelf, bookshelf_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, bookshelf_box)); - - models::TexturedModel lamp = GetFurnitureModel(FurnitureType::LAMP); - glm::vec3 lamp_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box lamp_box = { lamp_pos, lamp.raw_model.model_size }; - furniture.push_back(std::make_shared(lamp, lamp_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, lamp_box)); - - models::TexturedModel ceiling_object = GetFurnitureModel(FurnitureType::CEILING_OBJECTS); - glm::vec3 ceiling_object_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box ceiling_object_box = { ceiling_object_pos, ceiling_object.raw_model.model_size }; - furniture.push_back(std::make_shared(ceiling_object, ceiling_object_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, ceiling_object_box)); - - models::TexturedModel misc = GetFurnitureModel(FurnitureType::MISC); - glm::vec3 misc_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box misc_box = { misc_pos, misc.raw_model.model_size }; - furniture.push_back(std::make_shared(misc, misc_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, misc_box)); - */ + furniture_list->push_back(std::make_shared(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE, model_box)); } - models::TexturedModel HouseGenerator::GetFurnitureModel(const FurniturePiece* furniture) + models::TexturedModel HouseGenerator::GetFurnitureModel(const singleton::FurniturePiece* furniture) { - std::deque* furniture_list = nullptr; + std::deque furniture_list; + std::deque furniture_models = singleton::Model_Storage::get_instance()->get_all_furniture_models(); - for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + std::cout << "type of furniture_piece: " << int(furniture->type) << std::endl; + + for (auto it = furniture_models.begin(); it != furniture_models.end(); ++it) { if (it->furniture.type == furniture->type) { - furniture_list = &it->texture; + std::deque textures = it->texture; + for (int i = 0; i< textures.size(); i++) + { + furniture_list.push_back(textures.at(i)); + } + std::cout << "Size of textures: " << textures.size() << std::endl; + std::cout << "Size of furniture_list: " << furniture_list.size() << std::endl; + break; } } - - if (furniture_list == nullptr) + std::cout << "Size of furniture_list after for loop: " << furniture_list.size() << std::endl; + if (furniture_list.empty()) { std::cerr << "OH NEEEEEEEEEEEEEEE"; } - const int modelNumber = toolbox::Random(0, furniture_list->size() - 1); + const int modelNumber = toolbox::Random(0, furniture_list.size() - 1); - return furniture_list->at(modelNumber); - - //return {}; - } - - 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); - - FurnitureModel couch; - couch.furniture = { - FurnitureType::COUCH, 2 }; - couch.texture = couches; - - furniture_models.push_back(couch); - - // 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); - - models::RawModel table_model3 = render_engine::LoadObjModel("res/bureauOne.obj"); - models::TexturedModel table3 = { table_model3, default_texture }; - tables.push_back(table3); - - FurnitureModel table; - table.furniture = { - FurnitureType::TABLE, 2 }; - table.texture = tables; - - furniture_models.push_back(table); - - // 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); - - FurnitureModel chair; - chair.furniture = { - FurnitureType::CHAIR, 1 }; - chair.texture = chairs; - - furniture_models.push_back(chair); - - // Plants - std::deque plants; - - models::RawModel plant_model1 = render_engine::LoadObjModel("res/plantOne.obj"); - models::TexturedModel plant1 = { plant_model1, default_texture }; - plants.push_back(plant1); - - models::RawModel plant_model2 = render_engine::LoadObjModel("res/plantTwo.obj"); - models::TexturedModel plant2 = { plant_model2, default_texture }; - plants.push_back(plant2); - - models::RawModel plant_model3 = render_engine::LoadObjModel("res/plantThree.obj"); - models::TexturedModel plant3 = { plant_model3, default_texture }; - plants.push_back(plant3); - - FurnitureModel plant; - plant.furniture = { - FurnitureType::PLANT, 1 }; - plant.texture = plants; - - furniture_models.push_back(plant); - - // Guitars - std::deque guitars; - - models::RawModel guitar_model1 = render_engine::LoadObjModel("res/guitarOne.obj"); - models::TexturedModel guitar1 = { guitar_model1, default_texture }; - guitars.push_back(guitar1); - - models::RawModel guitar_model2 = render_engine::LoadObjModel("res/guitarTwo.obj"); - models::TexturedModel guitar2 = { guitar_model2, default_texture }; - guitars.push_back(guitar2); - - FurnitureModel guitar; - guitar.furniture = { - FurnitureType::GUITAR, 1 }; - guitar.texture = guitars; - - furniture_models.push_back(guitar); - - // Bookshelves - std::deque bookshelves; - - models::RawModel bookshelf_model1 = render_engine::LoadObjModel("res/bookShelfOne.obj"); - models::TexturedModel bookshelf1 = { bookshelf_model1, default_texture }; - bookshelves.push_back(bookshelf1); - - models::RawModel bookshelf_model2 = render_engine::LoadObjModel("res/bookShelfTwo.obj"); - models::TexturedModel bookshelf2 = { bookshelf_model2, default_texture }; - bookshelves.push_back(bookshelf2); - - models::RawModel bookshelf_model3 = render_engine::LoadObjModel("res/bookShelfThree.obj"); - models::TexturedModel bookshelf3 = { bookshelf_model3, default_texture }; - bookshelves.push_back(bookshelf3); - - FurnitureModel bookshelf; - bookshelf.furniture = { - FurnitureType::BOOKSHELF, 1 }; - bookshelf.texture = bookshelves; - - furniture_models.push_back(bookshelf); - - // Lamps - std::dequelamps; - - models::RawModel lamp_model1 = render_engine::LoadObjModel("res/lampOne.obj"); - models::TexturedModel lamp1 = { lamp_model1, default_texture }; - lamps.push_back(lamp1); - - models::RawModel lamp_model2 = render_engine::LoadObjModel("res/lampTwo.obj"); - models::TexturedModel lamp2 = { lamp_model2, default_texture }; - lamps.push_back(lamp2); - - FurnitureModel lamp; - lamp.furniture = { - FurnitureType::LAMP, 1 }; - lamp.texture = lamps; - - furniture_models.push_back(lamp); - - // Ceiling objects - std::dequeceiling_Objects; - - models::RawModel ceiling_Obj_model1 = render_engine::LoadObjModel("res/ceilingFan.obj"); - models::TexturedModel ceiling_Obj1 = { ceiling_Obj_model1, default_texture }; - ceiling_Objects.push_back(ceiling_Obj1); - - models::RawModel ceiling_Obj_model2 = render_engine::LoadObjModel("res/ceilingFanTwo.obj"); - models::TexturedModel ceiling_Obj2 = { ceiling_Obj_model2, default_texture }; - ceiling_Objects.push_back(ceiling_Obj2); - - models::RawModel ceiling_Obj_model3 = render_engine::LoadObjModel("res/ceilingLampOne.obj"); - models::TexturedModel ceiling_Obj3 = { ceiling_Obj_model3, default_texture }; - ceiling_Objects.push_back(ceiling_Obj3); - - models::RawModel ceiling_Obj_model4 = render_engine::LoadObjModel("res/ceilingLampTwo.obj"); - models::TexturedModel ceiling_Obj4 = { ceiling_Obj_model4, default_texture }; - ceiling_Objects.push_back(ceiling_Obj4); - - FurnitureModel ceiling_object; - ceiling_object.furniture = { - FurnitureType::CEILING_OBJECTS, 1 }; - ceiling_object.texture = ceiling_Objects; - - furniture_models.push_back(ceiling_object); - - // Miscs - std::deque miscs; - - models::RawModel misc_model1 = render_engine::LoadObjModel("res/tv.obj"); - models::TexturedModel misc1 = { misc_model1, default_texture }; - miscs.push_back(misc1); - - models::RawModel misc_model2 = render_engine::LoadObjModel("res/radio.obj"); - models::TexturedModel misc2 = { misc_model2, default_texture }; - miscs.push_back(misc2); - - models::RawModel misc_model3 = render_engine::LoadObjModel("res/Flowerpot.obj"); - models::TexturedModel misc3 = { misc_model3, default_texture }; - miscs.push_back(misc3); - - FurnitureModel misc; - misc.furniture = { - FurnitureType::MISC, 1 }; - misc.texture = miscs; - - furniture_models.push_back(misc); + return furniture_list.at(modelNumber); } + } diff --git a/src/entities/house_generator.h b/src/entities/house_generator.h index b54c68d..ef62c38 100644 --- a/src/entities/house_generator.h +++ b/src/entities/house_generator.h @@ -5,50 +5,14 @@ #include #include "../models/Model.h" #include "../collision/collision.h" +#include "../model_Storage.h" namespace entities { - enum class FurnitureType - { - COUCH, - TABLE, - CHAIR, - PLANT, - GUITAR, - BOOKSHELF, - LAMP, - CEILING_OBJECTS, - MISC - }; - struct FurniturePiece - { - FurnitureType type; - int size; - }; - - struct FurnitureModel - { - FurniturePiece furniture; - std::deque texture; - - bool operator<(FurnitureModel a) - { - return true; - } - }; - - - class HouseGenerator { private: const float HOUSE_SIZE = 30; - - models::TexturedModel house_model; - models::ModelTexture default_texture; - - //std::map> furniture_models; - std::deque furniture_models; public: HouseGenerator(); @@ -60,21 +24,16 @@ namespace entities * * @return: A list with all the entities of the generated house (the furniture) */ - std::deque> GenerateHouse(const glm::vec3& position, float y_rotation); + void GenerateHouse(std::deque>* furniture_list, const glm::vec3& position, float y_rotation); /* * @brief: Returns the depth of the house (chunk) */ - float GetHouseDepth() const { return house_model.raw_model.model_size.x * HOUSE_SIZE; } + float GetHouseDepth() const { return singleton::Model_Storage::get_instance()->get_house_model().raw_model.model_size.x * HOUSE_SIZE; } private: - const FurniturePiece* GetRandomFurniturePiece(); - const FurniturePiece* GetFurniturePiece(FurnitureType type); - - /* - * @brief: This function loads all the 3D furniture models - */ - void GenerateFurnitureModels(); + void GetRandomFurniturePiece(singleton::FurniturePiece* furniture_piece); + void GetFurniturePiece(singleton::FurnitureType type, singleton::FurniturePiece* furniture_piece); /* * @brief: This funtion chooses and returns a random furniture of the given furniture type @@ -83,6 +42,6 @@ namespace entities * * @return: The model of the random furniture of the chosen furniture type */ - models::TexturedModel GetFurnitureModel(const FurniturePiece* furniture); + models::TexturedModel GetFurnitureModel(const singleton::FurniturePiece* furniture); }; } diff --git a/src/main.cpp b/src/main.cpp index d2d5a86..2cc5640 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -132,6 +132,7 @@ int main(void) // Clean up -> preventing memory leaks!!! std::cout << "ending..." << std::endl; + render_engine::loader::CleanUp(); glfwTerminate(); return 0; } diff --git a/src/model_Storage.cpp b/src/model_Storage.cpp index 4fa763f..17a2f9e 100644 --- a/src/model_Storage.cpp +++ b/src/model_Storage.cpp @@ -6,6 +6,7 @@ std::mutex singleton::Model_Storage::mutex; singleton::Model_Storage::~Model_Storage() { + std::cout << "DELETING...." << std::endl; delete instance; } @@ -57,7 +58,7 @@ void singleton::Model_Storage::add_lamp(models::TexturedModel lamp) lamps.push_back(lamp); } -void singleton::Model_Storage::addd_ceiling_object(models::TexturedModel co) +void singleton::Model_Storage::add_ceiling_object(models::TexturedModel co) { ceiling_objects.push_back(co); } @@ -67,6 +68,11 @@ void singleton::Model_Storage::add_misc(models::TexturedModel misc) miscs.push_back(misc); } +void singleton::Model_Storage::add_furniture_model(FurnitureModel model) +{ + furniture_models.push_back(model); +} + /** * getters */ @@ -116,6 +122,11 @@ std::deque singleton::Model_Storage::get_all_miscs() return miscs; } +std::deque singleton::Model_Storage::get_all_furniture_models() +{ + return furniture_models; +} + models::TexturedModel singleton::Model_Storage::get_couch(int index) { return couches[index]; @@ -161,6 +172,11 @@ models::TexturedModel singleton::Model_Storage::get_misc(int index) return miscs[index]; } +singleton::FurnitureModel singleton::Model_Storage::get_furniture_model(int index) +{ + return furniture_models[index]; +} + //getters for default variables models::TexturedModel singleton::Model_Storage::get_house_model() diff --git a/src/model_Storage.h b/src/model_Storage.h index 665fbf5..6e19bb7 100644 --- a/src/model_Storage.h +++ b/src/model_Storage.h @@ -6,6 +6,35 @@ #include "entities/Entity.h" namespace singleton { + enum class FurnitureType + { + COUCH, + TABLE, + CHAIR, + PLANT, + GUITAR, + BOOKSHELF, + LAMP, + CEILING_OBJECTS, + MISC + }; + struct FurniturePiece + { + FurnitureType type; + int size; + }; + + struct FurnitureModel + { + FurniturePiece furniture; + std::deque texture; + + bool operator<(FurnitureModel a) + { + return true; + } + }; + class Model_Storage { private: @@ -17,7 +46,9 @@ namespace singleton { //default texture models::ModelTexture default_texture; - + //list that sorts furniture_models on type + std::deque furniture_models; + //list of furniture: //couches std::deque couches; @@ -64,8 +95,9 @@ namespace singleton { void add_guitar(models::TexturedModel guitar); void add_bookshelf(models::TexturedModel bookshelf); void add_lamp(models::TexturedModel lamp); - void addd_ceiling_object(models::TexturedModel co); + void add_ceiling_object(models::TexturedModel co); void add_misc(models::TexturedModel misc); + void add_furniture_model(FurnitureModel model); //getters for the whole list std::deque get_all_couches(); @@ -77,6 +109,7 @@ namespace singleton { std::deque get_all_lamps(); std::deque get_all_ceiling_objects(); std::deque get_all_miscs(); + std::deque get_all_furniture_models(); //getters for one model models::TexturedModel get_couch(int index); @@ -88,6 +121,7 @@ namespace singleton { models::TexturedModel get_lamp(int index); models::TexturedModel get_ceiling_object(int index); models::TexturedModel get_misc(int index); + FurnitureModel get_furniture_model(int index); //getters for the standard variables models::TexturedModel get_house_model(); diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index 0ddaad9..9bcb229 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -113,7 +113,8 @@ namespace scene } int z_offset = model_pos * (house_generator->GetHouseDepth()); // how much "in the distance" we should load the model - std::deque> furniture = house_generator->GenerateHouse(glm::vec3(0, -75, -50 - z_offset), 90); + std::deque> furniture; + house_generator->GenerateHouse(&furniture, glm::vec3(0, -75, -50 - z_offset), 90); furniture_count = furniture.size(); house_models.insert(house_models.end(), furniture.begin(), furniture.end()); @@ -212,7 +213,7 @@ namespace scene } shader->CleanUp(); gui_shader->CleanUp(); - render_engine::loader::CleanUp(); + //render_engine::loader::CleanUp(); return return_value; } diff --git a/src/scenes/loading_Scene.cpp b/src/scenes/loading_Scene.cpp index 4deb23c..20308f3 100644 --- a/src/scenes/loading_Scene.cpp +++ b/src/scenes/loading_Scene.cpp @@ -90,45 +90,54 @@ namespace scene singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/couchThree.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/Coach.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/lawnBenchOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::COUCH, 2}, singleton::Model_Storage::get_instance()->get_all_couches() }); + // Tables - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/tableOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/tableTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/bureauOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_table({ render_engine::LoadObjModel("res/tableOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_table({ render_engine::LoadObjModel("res/tableTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_table({ render_engine::LoadObjModel("res/bureauOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::TABLE, 2}, singleton::Model_Storage::get_instance()->get_all_tables() }); // Chairs - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/launchchair.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/lawnChairOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/ugly_chair.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_chair({ render_engine::LoadObjModel("res/launchchair.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_chair({ render_engine::LoadObjModel("res/lawnChairOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_chair({ render_engine::LoadObjModel("res/ugly_chair.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::CHAIR, 1}, singleton::Model_Storage::get_instance()->get_all_chairs() }); // Plants - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/plantOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/plantTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/plantThree.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_plant({ render_engine::LoadObjModel("res/plantOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_plant({ render_engine::LoadObjModel("res/plantTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_plant({ render_engine::LoadObjModel("res/plantThree.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::PLANT, 1}, singleton::Model_Storage::get_instance()->get_all_plants() }); // Guitars - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/guitarOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/guitarTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - + singleton::Model_Storage::get_instance()->add_guitar({ render_engine::LoadObjModel("res/guitarOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_guitar({ render_engine::LoadObjModel("res/guitarTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::GUITAR, 1}, singleton::Model_Storage::get_instance()->get_all_guitars() }); + // Bookshelves - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/bookShelfOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/bookShelfTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/bookShelfThree.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_bookshelf({ render_engine::LoadObjModel("res/bookShelfOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_bookshelf({ render_engine::LoadObjModel("res/bookShelfTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_bookshelf({ render_engine::LoadObjModel("res/bookShelfThree.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::BOOKSHELF, 1}, singleton::Model_Storage::get_instance()->get_all_bookshelves() }); // Lamps - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/lampOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/lampTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_lamp({ render_engine::LoadObjModel("res/lampOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_lamp({ render_engine::LoadObjModel("res/lampTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::LAMP, 1}, singleton::Model_Storage::get_instance()->get_all_lamps() }); // Ceiling objects - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/ceilingFan.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/ceilingFanTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/ceilingLampOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/ceilingLampTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_ceiling_object({ render_engine::LoadObjModel("res/ceilingFan.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_ceiling_object({ render_engine::LoadObjModel("res/ceilingFanTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_ceiling_object({ render_engine::LoadObjModel("res/ceilingLampOne.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_ceiling_object({ render_engine::LoadObjModel("res/ceilingLampTwo.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::CEILING_OBJECTS, 1}, singleton::Model_Storage::get_instance()->get_all_ceiling_objects() }); // Miscs - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/tv.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/radio.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); - singleton::Model_Storage::get_instance()->add_couch({ render_engine::LoadObjModel("res/Flowerpot.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_misc({ render_engine::LoadObjModel("res/tv.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_misc({ render_engine::LoadObjModel("res/radio.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_misc({ render_engine::LoadObjModel("res/Flowerpot.obj"), singleton::Model_Storage::get_instance()->get_default_texture() }); + singleton::Model_Storage::get_instance()->add_furniture_model({ {singleton::FurnitureType::MISC, 1}, singleton::Model_Storage::get_instance()->get_all_miscs() }); } } diff --git a/src/scenes/startup_Scene.cpp b/src/scenes/startup_Scene.cpp index d83d2fb..7e814e5 100644 --- a/src/scenes/startup_Scene.cpp +++ b/src/scenes/startup_Scene.cpp @@ -175,7 +175,7 @@ namespace scene glfwPollEvents(); } gui_shader1->CleanUp(); - render_engine::loader::CleanUp(); + //render_engine::loader::CleanUp(); return return_value; }