From fb70d10c470cf1c64074bc34d6440d83b7572f41 Mon Sep 17 00:00:00 2001 From: Jasper Date: Fri, 11 Jun 2021 15:58:28 +0200 Subject: [PATCH 1/3] [EDIT] made a grid for the models to load in Some items still clip through the wall --- .../house_generator.cpp | 340 ++++++++++++++++++ src/entities/house_generator.cpp | 142 ++++++-- src/entities/house_generator.h | 28 +- 3 files changed, 476 insertions(+), 34 deletions(-) create mode 100644 enc_temp_folder/e14e1bac1d366a32333657ac3b22e523/house_generator.cpp diff --git a/enc_temp_folder/e14e1bac1d366a32333657ac3b22e523/house_generator.cpp b/enc_temp_folder/e14e1bac1d366a32333657ac3b22e523/house_generator.cpp new file mode 100644 index 0000000..529b313 --- /dev/null +++ b/enc_temp_folder/e14e1bac1d366a32333657ac3b22e523/house_generator.cpp @@ -0,0 +1,340 @@ +#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(); + } + + const FurniturePiece* HouseGenerator::GetRandomFurniturePiece() + { + FurnitureType random_type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1)); + + for(std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + { + if(it->furniture.type == random_type) + { + return &it->furniture; + } + } + + return nullptr; + } + + 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)); + int house_size = 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); + double multiplier_x = house_size/2; + double multiplier_z = house_size / 3; + + for (int z = 1; z < 4; z++) { + for (int x = 1; x < 3; x++) + { + //if (toolbox::Random(0, 100) < 50) { + const FurniturePiece* furniture_piece = GetRandomFurniturePiece(); + models::TexturedModel model = GetFurnitureModel(furniture_piece); + //if (//check of size van furniture nog past in huidige grid vlakje, of ie geen 2 size op t laatste vakje neerzet) { + 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)); + //} + //} + } + } + + 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)); + */ + + } + + models::TexturedModel HouseGenerator::GetFurnitureModel(const FurniturePiece* furniture) + { + std::deque *furniture_list = nullptr; + + for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + { + if(it->furniture.type == furniture->type) + { + furniture_list = &it->texture; + } + } + + if (furniture_list == nullptr) + { + std::cerr << "OH NEEEEEEEEEEEEEEE"; + } + + 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); + } +} diff --git a/src/entities/house_generator.cpp b/src/entities/house_generator.cpp index 6573701..ea3f00b 100644 --- a/src/entities/house_generator.cpp +++ b/src/entities/house_generator.cpp @@ -20,22 +20,51 @@ namespace entities GenerateFurnitureModels(); } + const FurniturePiece* HouseGenerator::GetRandomFurniturePiece() + { + FurnitureType random_type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1)); + + for(std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + { + if(it->furniture.type == random_type) + { + return &it->furniture; + } + } + + return nullptr; + } + 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)); + int house_size = 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); + double multiplier_x = house_size/2; + double multiplier_z = house_size / 3; + + for (int z = 1; z < 4; z++) { + for (int x = 1; x < 3; x++) + { + if (toolbox::Random(0, 100) < 50) { + const FurniturePiece* furniture_piece = GetRandomFurniturePiece(); + models::TexturedModel model = GetFurnitureModel(furniture_piece); + //if (//check of size van furniture nog past in huidige grid vlakje, of ie geen 2 size op t laatste vakje neerzet) { + 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); - for(int i = 0; i(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); - } + 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 @@ -85,22 +114,31 @@ namespace entities 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)); */ - return furniture; + } - models::TexturedModel HouseGenerator::GetFurnitureModel(FurnitureType furniture) + models::TexturedModel HouseGenerator::GetFurnitureModel(const FurniturePiece* furniture) { - const auto found = furniture_models.find(furniture); - if (found == furniture_models.end()) + std::deque *furniture_list = nullptr; + + for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + { + if(it->furniture.type == furniture->type) + { + furniture_list = &it->texture; + } + } + + if (furniture_list == nullptr) { std::cerr << "OH NEEEEEEEEEEEEEEE"; } - auto models = found->second; - - const int modelNumber = toolbox::Random(0, models.size() - 1); + const int modelNumber = toolbox::Random(0, furniture_list->size() - 1); - return models[modelNumber]; + return furniture_list->at(modelNumber); + + //return {}; } void HouseGenerator::GenerateFurnitureModels() @@ -119,8 +157,13 @@ namespace entities 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.insert(std::pair>(FurnitureType::COUCH, couches)); + furniture_models.push_back(couch); // Tables std::deque tables; @@ -137,7 +180,12 @@ namespace entities models::TexturedModel table3 = { table_model3, default_texture }; tables.push_back(table3); - furniture_models.insert(std::pair>(FurnitureType::TABLE, tables)); + FurnitureModel table; + table.furniture = { + FurnitureType::TABLE, 2 }; + table.texture = tables; + + furniture_models.push_back(table); // Chairs std::deque chairs; @@ -154,8 +202,12 @@ namespace entities models::TexturedModel chair3 = { chair_model3, default_texture }; chairs.push_back(chair3); - furniture_models.insert(std::pair>(FurnitureType::CHAIR, chairs)); + FurnitureModel chair; + chair.furniture = { + FurnitureType::CHAIR, 1 }; + chair.texture = chairs; + furniture_models.push_back(chair); // Plants std::deque plants; @@ -171,8 +223,13 @@ namespace entities models::RawModel plant_model3 = render_engine::LoadObjModel("res/plantThree.obj"); models::TexturedModel plant3 = { plant_model3, default_texture }; plants.push_back(plant3); - - furniture_models.insert(std::pair>(FurnitureType::PLANT, plants)); + + FurnitureModel plant; + plant.furniture = { + FurnitureType::PLANT, 1 }; + plant.texture = plants; + + furniture_models.push_back(plant); // Guitars std::deque guitars; @@ -184,8 +241,13 @@ namespace entities models::RawModel guitar_model2 = render_engine::LoadObjModel("res/guitarTwo.obj"); models::TexturedModel guitar2 = { guitar_model2, default_texture }; guitars.push_back(guitar2); - - furniture_models.insert(std::pair>(FurnitureType::GUITAR, guitars)); + + FurnitureModel guitar; + guitar.furniture = { + FurnitureType::GUITAR, 1 }; + guitar.texture = guitars; + + furniture_models.push_back(guitar); // Bookshelves std::deque bookshelves; @@ -202,7 +264,12 @@ namespace entities models::TexturedModel bookshelf3 = { bookshelf_model3, default_texture }; bookshelves.push_back(bookshelf3); - furniture_models.insert(std::pair>(FurnitureType::BOOKSHELF, bookshelves)); + FurnitureModel bookshelf; + bookshelf.furniture = { + FurnitureType::BOOKSHELF, 1 }; + bookshelf.texture = bookshelves; + + furniture_models.push_back(bookshelf); // Lamps std::dequelamps; @@ -214,8 +281,13 @@ namespace entities models::RawModel lamp_model2 = render_engine::LoadObjModel("res/lampTwo.obj"); models::TexturedModel lamp2 = { lamp_model2, default_texture }; lamps.push_back(lamp2); - - furniture_models.insert(std::pair>(FurnitureType::LAMP, lamps)); + + FurnitureModel lamp; + lamp.furniture = { + FurnitureType::LAMP, 1 }; + lamp.texture = lamps; + + furniture_models.push_back(lamp); // Ceiling objects std::dequeceiling_Objects; @@ -235,8 +307,13 @@ namespace entities 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); - - furniture_models.insert(std::pair>(FurnitureType::CEILING_OBJECTS, ceiling_Objects)); + + 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; @@ -253,6 +330,11 @@ namespace entities models::TexturedModel misc3 = { misc_model3, default_texture }; miscs.push_back(misc3); - furniture_models.insert(std::pair>(FurnitureType::MISC, miscs)); + FurnitureModel misc; + misc.furniture = { + FurnitureType::MISC, 1 }; + misc.texture = miscs; + + furniture_models.push_back(misc); } } diff --git a/src/entities/house_generator.h b/src/entities/house_generator.h index 12fbfa0..84d8f42 100644 --- a/src/entities/house_generator.h +++ b/src/entities/house_generator.h @@ -20,6 +20,24 @@ namespace entities CEILING_OBJECTS, MISC }; + struct FurniturePiece + { + FurnitureType type; + int size; + }; + + struct FurnitureModel + { + FurniturePiece furniture; + std::deque texture; + + bool operator<(FurnitureModel a) + { + return true; + } + }; + + class HouseGenerator { @@ -29,11 +47,11 @@ namespace entities models::TexturedModel house_model; models::ModelTexture default_texture; - std::map> furniture_models; - + //std::map> furniture_models; + std::deque furniture_models; public: HouseGenerator(); - + /* * @brief: This function generates a house with furniture at the given position and rotation * @@ -50,6 +68,8 @@ namespace entities float GetHouseDepth() const { return house_model.raw_model.model_size.x * HOUSE_SIZE; } private: + const FurniturePiece* GetRandomFurniturePiece(); + /* * @brief: This function loads all the 3D furniture models */ @@ -62,6 +82,6 @@ namespace entities * * @return: The model of the random furniture of the chosen furniture type */ - models::TexturedModel GetFurnitureModel(FurnitureType furniture); + models::TexturedModel GetFurnitureModel(const FurniturePiece* furniture); }; } From 24285b971467f98db89e293b031cb36523c0a499 Mon Sep 17 00:00:00 2001 From: Jasper Date: Fri, 11 Jun 2021 16:34:25 +0200 Subject: [PATCH 2/3] [ADD] added an extra layer to the grid for the lamps and fans. Grid now generates correctly. Good enough --- src/entities/house_generator.cpp | 89 ++++++++++++++++++++------------ src/entities/house_generator.h | 1 + 2 files changed, 57 insertions(+), 33 deletions(-) diff --git a/src/entities/house_generator.cpp b/src/entities/house_generator.cpp index ea3f00b..8b09e40 100644 --- a/src/entities/house_generator.cpp +++ b/src/entities/house_generator.cpp @@ -24,48 +24,71 @@ namespace entities { FurnitureType random_type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1)); - for(std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) { - if(it->furniture.type == random_type) + if (it->furniture.type == random_type) { return &it->furniture; } } - + return nullptr; } - + + const FurniturePiece* HouseGenerator::GetFurniturePiece(FurnitureType type) + { + for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) + { + if (it->furniture.type == type) + { + return &it->furniture; + } + } + return nullptr; + } + 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)); - int house_size = 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); - double multiplier_x = house_size/2; - double multiplier_z = house_size / 3; - + 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; + + 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); + double multiplier_x = house_size_x / 2; + double multiplier_z = house_size_z / 3; + for (int z = 1; z < 4; z++) { for (int x = 1; x < 3; x++) { - if (toolbox::Random(0, 100) < 50) { - const FurniturePiece* furniture_piece = GetRandomFurniturePiece(); + 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 (//check of size van furniture nog past in huidige grid vlakje, of ie geen 2 size op t laatste vakje neerzet) { - 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); + 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.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); + 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); @@ -93,7 +116,7 @@ namespace entities 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 }; @@ -114,30 +137,30 @@ namespace entities 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)); */ - + } models::TexturedModel HouseGenerator::GetFurnitureModel(const FurniturePiece* furniture) { - std::deque *furniture_list = nullptr; - + std::deque* furniture_list = nullptr; + for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) { - if(it->furniture.type == furniture->type) + if (it->furniture.type == furniture->type) { furniture_list = &it->texture; } } - + if (furniture_list == nullptr) { std::cerr << "OH NEEEEEEEEEEEEEEE"; } - + const int modelNumber = toolbox::Random(0, furniture_list->size() - 1); - + return furniture_list->at(modelNumber); - + //return {}; } @@ -145,7 +168,7 @@ namespace entities { // 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); @@ -162,7 +185,7 @@ namespace entities couch.furniture = { FurnitureType::COUCH, 2 }; couch.texture = couches; - + furniture_models.push_back(couch); // Tables @@ -179,12 +202,12 @@ namespace entities 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 @@ -335,6 +358,6 @@ namespace entities FurnitureType::MISC, 1 }; misc.texture = miscs; - furniture_models.push_back(misc); + furniture_models.push_back(misc); } } diff --git a/src/entities/house_generator.h b/src/entities/house_generator.h index 84d8f42..b54c68d 100644 --- a/src/entities/house_generator.h +++ b/src/entities/house_generator.h @@ -69,6 +69,7 @@ namespace entities private: const FurniturePiece* GetRandomFurniturePiece(); + const FurniturePiece* GetFurniturePiece(FurnitureType type); /* * @brief: This function loads all the 3D furniture models From 26d438e4d17c04e0da3491733af0f6d35591fed3 Mon Sep 17 00:00:00 2001 From: Jasper Date: Fri, 18 Jun 2021 09:58:08 +0200 Subject: [PATCH 3/3] [EDIT] models now generate in a 3x3 grid with always 9 models --- src/entities/house_generator.cpp | 17 ++++++++++------- src/gui/gui_element.h | 2 +- src/scenes/loading_Scene.cpp | 6 +++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/entities/house_generator.cpp b/src/entities/house_generator.cpp index 8b09e40..c589338 100644 --- a/src/entities/house_generator.cpp +++ b/src/entities/house_generator.cpp @@ -22,7 +22,10 @@ namespace entities const FurniturePiece* HouseGenerator::GetRandomFurniturePiece() { - FurnitureType random_type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1)); + FurnitureType random_type = FurnitureType::CEILING_OBJECTS; + while (random_type == FurnitureType::CEILING_OBJECTS ) { + random_type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1)); + } for (std::deque::iterator it = furniture_models.begin(); it != furniture_models.end(); ++it) { @@ -59,25 +62,25 @@ namespace entities 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); - double multiplier_x = house_size_x / 2; + double multiplier_x = house_size_x / 4; double multiplier_z = house_size_z / 3; for (int z = 1; z < 4; z++) { - for (int x = 1; x < 3; x++) + for (int x = 1; x < 4; x++) { - if (toolbox::Random(0, 100) < 90) { + //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)) { + //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)); } - } - } + //} + //} } } diff --git a/src/gui/gui_element.h b/src/gui/gui_element.h index 9887c68..17bdc17 100644 --- a/src/gui/gui_element.h +++ b/src/gui/gui_element.h @@ -19,7 +19,7 @@ namespace gui */ struct GuiTexture { - int texture; + GLuint texture; glm::vec2 position; glm::vec2 scale; diff --git a/src/scenes/loading_Scene.cpp b/src/scenes/loading_Scene.cpp index 3c9e245..dd42165 100644 --- a/src/scenes/loading_Scene.cpp +++ b/src/scenes/loading_Scene.cpp @@ -20,12 +20,12 @@ namespace scene Scenes Loading_Scene::start(GLFWwindow* window) { render(); - + return Scenes::STARTUP; } void Loading_Scene::render() { - render_engine::renderer::Prepare(); + /*render_engine::renderer::Prepare(); gui::GuiTexture loading_image = { render_engine::loader::LoadTexture("res/menu_item_start1.png"), glm::vec2(0,0),glm::vec2(1,1) }; @@ -33,7 +33,7 @@ namespace scene std::vector image_list; image_list.push_back(&loading_image); - render_engine::renderer::Render(image_list, *gui_shader); + render_engine::renderer::Render(image_list, *gui_shader);*/ } void Loading_Scene::update(GLFWwindow* window)