[FEATURE] simple house generator
This commit is contained in:
@@ -1,15 +1,20 @@
|
||||
#include "HouseGenerator.h"
|
||||
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
|
||||
#include "../renderEngine/obj_loader.h"
|
||||
#include "../renderEngine/Loader.h"
|
||||
#include "../toolbox/toolbox.h"
|
||||
|
||||
namespace entities
|
||||
{
|
||||
HouseGenerator::HouseGenerator()
|
||||
{
|
||||
models::RawModel raw_model = render_engine::LoadObjModel("res/HouseNew.obj");
|
||||
models::ModelTexture texture = { render_engine::loader::LoadTexture("res/Texture.png") };
|
||||
texture.shine_damper = 10;
|
||||
house_model = { raw_model, texture };
|
||||
default_texture = { render_engine::loader::LoadTexture("res/Texture.png") };
|
||||
default_texture.shine_damper = 10;
|
||||
house_model = { raw_model, default_texture };
|
||||
|
||||
GenerateFurnitureModels();
|
||||
}
|
||||
@@ -21,15 +26,37 @@ namespace entities
|
||||
// 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(Furniture::COUCH);
|
||||
furniture.push_back(std::make_shared<Entity>(couch, glm::vec3(position.x, position.y + 20, position.z + 10), glm::vec3(0, 0, 0), 1));
|
||||
|
||||
return furniture;
|
||||
}
|
||||
|
||||
models::TexturedModel HouseGenerator::GetFurnitureModel(Furniture 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);
|
||||
|
||||
furniture_models.insert(std::pair<Furniture, std::deque<models::TexturedModel>>(Furniture::COUCH, couches));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,19 +2,26 @@
|
||||
|
||||
#include <deque>
|
||||
#include <memory>
|
||||
#include <map>
|
||||
#include "../models/Model.h"
|
||||
#include "../collision/collision.h"
|
||||
|
||||
namespace entities
|
||||
{
|
||||
enum class Furniture
|
||||
{
|
||||
COUCH
|
||||
};
|
||||
|
||||
class HouseGenerator
|
||||
{
|
||||
private:
|
||||
const float HOUSE_SIZE = 30;
|
||||
|
||||
models::TexturedModel house_model;
|
||||
|
||||
std::deque<models::TexturedModel> furniture_models;
|
||||
models::ModelTexture default_texture;
|
||||
|
||||
std::map<Furniture, std::deque<models::TexturedModel>> furniture_models;
|
||||
|
||||
public:
|
||||
HouseGenerator();
|
||||
@@ -29,9 +36,14 @@ namespace entities
|
||||
*/
|
||||
std::deque<std::shared_ptr<Entity>> GenerateHouse(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; }
|
||||
|
||||
private:
|
||||
void GenerateFurnitureModels();
|
||||
|
||||
models::TexturedModel GetFurnitureModel(Furniture furniture);
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user