Files
SDBA/src/entities/house_generator.cpp
2021-06-08 14:24:12 +02:00

117 lines
4.4 KiB
C++

#include "house_generator.h"
#include <functional>
#include <iostream>
#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<std::shared_ptr<Entity>> HouseGenerator::GenerateHouse(const glm::vec3& position, float y_rotation)
{
std::deque<std::shared_ptr<Entity>> furniture;
// Add house
furniture.push_front(std::make_shared<Entity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<models::TexturedModel> 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, std::deque<models::TexturedModel>>(FurnitureType::COUCH, couches));
// Tables
std::deque<models::TexturedModel> 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, std::deque<models::TexturedModel>>(FurnitureType::TABLE, tables));
// Chairs
std::deque<models::TexturedModel> 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, std::deque<models::TexturedModel>>(FurnitureType::CHAIR, chairs));
}
}