ADD: Basic Building System

This commit is contained in:
sebastian 2026-02-08 15:36:53 +01:00
parent ac75a5f7bb
commit 42a1e89bee
5 changed files with 57 additions and 8 deletions

View File

@ -0,0 +1,31 @@
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
# File Created: 03.06.2013 16:07:05
newmtl 20958_Log_Cabin_v1
Ns 18.0000
Ni 1.5000
d 1.0000
Tr 0.0000
Tf 1.0000 1.0000 1.0000
illum 2
Ka 1.0000 1.0000 1.0000
Kd 1.0000 1.0000 1.0000
Ks 0.3240 0.3240 0.3240
Ke 0.0000 0.0000 0.0000
map_Ka cabin.jpg
map_Kd cabin.jpg
map_Ks 20958_Log_Cabin_v1_specular.jpg
newmtl 02___Default
Ns 10.0000
Ni 1.5000
d 1.0000
Tr 0.0000
Tf 1.0000 1.0000 1.0000
illum 2
Ka 1.0000 1.0000 1.0000
Kd 1.0000 1.0000 1.0000
Ks 0.0000 0.0000 0.0000
Ke 0.0000 0.0000 0.0000
map_Ka disc_diffuse.JPG
map_Kd disc_diffuse.JPG

BIN
assets/cabin/cabin.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

View File

@ -22,7 +22,7 @@ GameLayer::GameLayer() :texturedModel(0,0) //Platzhalter, echtes Model kommt in
void GameLayer::onAttach()
{
texturedModel = *OBJLoader::loadModel("assets/dragon/dragon.obj", "assets/dragon/dragon.png", loader);
entity = std::make_unique<Entity>(Entity(std::make_shared<TexturedModel>(texturedModel), glm::vec3(0,0,-25), 0,0,0, 1.f));
entities.push_back(std::make_shared<Entity>(Entity(std::make_shared<TexturedModel>(texturedModel), glm::vec3(0,0,-25), 0,0,0, 1.f)));
camera = std::make_unique<Camera>();
light = std::make_unique<Light>(glm::vec3(0,10,0), glm::vec3(1,1,1));
mousePicker = std::make_unique<MousePicker>(renderer->getProjectionMatrix(), MathUtils::createViewMatrix(*camera));
@ -40,6 +40,9 @@ void GameLayer::onAttach()
//treeEntity = std::make_unique<Entity>(Entity(treeModel, glm::vec3(0,0,0), 0,0,0, 0.5f));
MapGenerator::generateHexMap(*map, 10,10,10.f, mapEntities);
printf("Generated Terrain with %lu Tiles!\n", map->tiles.size());
auto cabinModel = AssetManager::loadModel("cabin", "assets/cabin/cabin.obj", "assets/cabin/cabin.jpg", loader);
//entities.push_back(std::make_shared<Entity>(Entity(cabinModel, glm::vec3(0,0,0), 0,0,0, 1.f)));
}
void GameLayer::onDetach()
@ -58,12 +61,9 @@ void GameLayer::onUpdate()
if (InputManager::isKeyPressed(GLFW_KEY_D)) moveDir.x += 1.0f;
entity->increaseRotation(0,1,0);
camera->move(moveDir, 0.5f);
renderer->submitEntity(entity.get());
for (const auto& entity : mapEntities) {
for (const auto& entity : entities) {
renderer->submitEntity(entity.get());
}
@ -71,8 +71,27 @@ void GameLayer::onUpdate()
glm::vec3 intersectionPoint;
bool highlight = tile.intersect(camera->getPosition(), mousePicker->getCurrentRay(), intersectionPoint);
tile.isHighlighted = highlight;
if (tile.isHighlighted) {
if (InputManager::isMouseButtonPressed(GLFW_MOUSE_BUTTON_1)) {
//On this tile you should build something
if (!tile.building && tile.resourceType == RessourceType::WOOD) {
tile.entitiesOnTile.clear();
tile.building = std::make_shared<Entity>(AssetManager::getModel("cabin"), tile.worldPos, 0,0,0,1.f);
}
}
}
for (const auto& entity: tile.entitiesOnTile) {
renderer->submitEntity(entity.get());
}
if (tile.building) {
renderer->submitEntity(tile.building.get());
}
}
std::vector<HexRenderData> terrainRenderData = map->getTerrainRenderData(hexModelDefault, hexModelWood, hexModelStone);

View File

@ -26,7 +26,6 @@ public:
private:
Loader loader;
TexturedModel texturedModel;
std::unique_ptr<Entity> entity;
std::unique_ptr<Camera> camera;
std::unique_ptr<Light> light;
std::unique_ptr<MousePicker> mousePicker;
@ -36,9 +35,8 @@ private:
std::shared_ptr<TexturedModel> hexModelWood;
std::shared_ptr<TexturedModel> hexModelStone;
std::vector<std::shared_ptr<Entity>> tileEntities;
std::vector<std::shared_ptr<Entity>> mapEntities;
std::vector<std::shared_ptr<Entity>> entities;
std::unique_ptr<Map> map;
};

View File

@ -27,6 +27,7 @@ struct HexTile {
bool isHighlighted = false;
std::vector<std::shared_ptr<Entity>> entitiesOnTile;
std::shared_ptr<Entity> building;
bool intersect(const glm::vec3& rayOrigin, const glm::vec3& rayDirection, glm::vec3& intersectionPoint) const {