From 66f7d112a1e51d6ea02e53f20ff8f1df931689af Mon Sep 17 00:00:00 2001 From: sebastian Date: Sun, 8 Feb 2026 10:33:56 +0100 Subject: [PATCH] ADD: Forest Tiles --- src/game/GameLayer.cpp | 5 +++-- src/game/GameLayer.h | 3 ++- src/game/hexWorld/HexModelFactory.cpp | 13 ++++++++++--- src/game/hexWorld/HexModelFactory.h | 3 ++- src/game/hexWorld/HexTile.h | 7 ++++++- src/game/hexWorld/Map.cpp | 9 +++++++-- src/game/hexWorld/Map.h | 2 +- src/game/hexWorld/MapGenerator.h | 12 ++++++++++++ 8 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/game/GameLayer.cpp b/src/game/GameLayer.cpp index f3cbd0d..7f9f01d 100644 --- a/src/game/GameLayer.cpp +++ b/src/game/GameLayer.cpp @@ -27,7 +27,8 @@ void GameLayer::onAttach() mousePicker = std::make_unique(renderer->getProjectionMatrix(), MathUtils::createViewMatrix(*camera)); //Map Generation - hexModel = std::make_shared(HexModelFactory::createTexturedHexModel(loader)); + hexModelDefault = std::make_shared(HexModelFactory::createTexturedHexModel(loader, 1.0f, RessourceType::NONE)); + hexModelWood = std::make_shared(HexModelFactory::createTexturedHexModel(loader, 1.0f, RessourceType::WOOD)); map = std::make_unique(); MapGenerator::generateHexMap(*map, 10,10,1.f); printf("Generated Terrain with %lu Tiles!\n", map->tiles.size()); @@ -61,7 +62,7 @@ void GameLayer::onUpdate() tile.isHighlighted = highlight; } - std::vector terrainRenderData = map->getTerrainRenderData(hexModel); + std::vector terrainRenderData = map->getTerrainRenderData(hexModelDefault, hexModelWood); for (auto& renderData : terrainRenderData) { diff --git a/src/game/GameLayer.h b/src/game/GameLayer.h index 5f00e11..95854e1 100644 --- a/src/game/GameLayer.h +++ b/src/game/GameLayer.h @@ -32,7 +32,8 @@ private: std::unique_ptr mousePicker; std::unique_ptr renderer = std::make_unique(); - std::shared_ptr hexModel; + std::shared_ptr hexModelDefault; + std::shared_ptr hexModelWood; std::unique_ptr map; }; diff --git a/src/game/hexWorld/HexModelFactory.cpp b/src/game/hexWorld/HexModelFactory.cpp index e6db5c4..5049a10 100644 --- a/src/game/hexWorld/HexModelFactory.cpp +++ b/src/game/hexWorld/HexModelFactory.cpp @@ -48,8 +48,15 @@ RawModel HexModelFactory::createHexRawModel(Loader &loader, float radius) { return loader.loadToVAO(vertices, normals, uvs, indices); } -TexturedModel HexModelFactory::createTexturedHexModel(Loader &loader, float radius) { +TexturedModel HexModelFactory::createTexturedHexModel(Loader &loader, float radius, RessourceType ressourceType = RessourceType::NONE) { RawModel rawModel = createHexRawModel(loader, radius); - ModelTexture modelTexture = loader.loadTextureFromFile("assets/hex/white.png"); - return {std::make_shared(rawModel), std::make_shared(modelTexture)}; + + std::shared_ptr modelTexture; + if (ressourceType == RessourceType::NONE) { + modelTexture = std::make_shared(loader.loadTextureFromFile("assets/hex/white.png")); + } else { + modelTexture = std::make_shared(loader.loadTextureFromFile("assets/hex/wood/Ground053_1K-JPG_Color.jpg")); + } + + return {std::make_shared(rawModel), std::move(modelTexture)}; } diff --git a/src/game/hexWorld/HexModelFactory.h b/src/game/hexWorld/HexModelFactory.h index e71ff74..7592339 100644 --- a/src/game/hexWorld/HexModelFactory.h +++ b/src/game/hexWorld/HexModelFactory.h @@ -4,6 +4,7 @@ #ifndef HEXMODELFACTORY_H #define HEXMODELFACTORY_H +#include "HexTile.h" #include "../../engine/renderer/model/RawModel.h" #include "../../engine/renderer/model/TexturedModel.h" @@ -13,7 +14,7 @@ class Loader; class HexModelFactory { public: - static TexturedModel createTexturedHexModel(Loader& loader, float radius = 1.0f); + static TexturedModel createTexturedHexModel(Loader& loader, float radius, RessourceType ressourceType); private: static RawModel createHexRawModel(Loader& loader, float radius = 1.0f); }; diff --git a/src/game/hexWorld/HexTile.h b/src/game/hexWorld/HexTile.h index 958b1fe..175b80f 100644 --- a/src/game/hexWorld/HexTile.h +++ b/src/game/hexWorld/HexTile.h @@ -11,11 +11,16 @@ #include "glm/vec3.hpp" #include "glm/ext/quaternion_geometric.hpp" +enum class RessourceType { + NONE, + WOOD +}; + struct HexTile { glm::vec3 worldPos; int q, r; //Axiale Koordinaten (hex-Koordinaten) int ownerID = -1; - //Later: ResourceType + RessourceType resourceType = RessourceType::NONE; float radius; bool isHighlighted = false; diff --git a/src/game/hexWorld/Map.cpp b/src/game/hexWorld/Map.cpp index 1e8080d..790679e 100644 --- a/src/game/hexWorld/Map.cpp +++ b/src/game/hexWorld/Map.cpp @@ -4,11 +4,16 @@ #include "Map.h" -std::vector Map::getTerrainRenderData(const std::shared_ptr& hexModel) { +std::vector Map::getTerrainRenderData(const std::shared_ptr& hexModel, const std::shared_ptr& woodModel) { std::vector renderData; renderData.reserve(tiles.size()); for (auto& tile : tiles) { - HexRenderData data = HexRenderData(hexModel, tile.worldPos, tile.isHighlighted); + HexRenderData data; + if (tile.resourceType == RessourceType::WOOD) { + data = HexRenderData(woodModel, tile.worldPos, tile.isHighlighted); + } else { + data = HexRenderData(hexModel, tile.worldPos, tile.isHighlighted); + } renderData.push_back(data); } return renderData; diff --git a/src/game/hexWorld/Map.h b/src/game/hexWorld/Map.h index 341309b..4bd0484 100644 --- a/src/game/hexWorld/Map.h +++ b/src/game/hexWorld/Map.h @@ -16,7 +16,7 @@ public: std::vector areas; std::vector tiles; - std::vector getTerrainRenderData(const std::shared_ptr& hexModel); + std::vector getTerrainRenderData(const std::shared_ptr &hexModel, const std::shared_ptr &woodModel); }; diff --git a/src/game/hexWorld/MapGenerator.h b/src/game/hexWorld/MapGenerator.h index 4ef028d..933bef7 100644 --- a/src/game/hexWorld/MapGenerator.h +++ b/src/game/hexWorld/MapGenerator.h @@ -5,6 +5,7 @@ #ifndef MAPGENERATOR_H #define MAPGENERATOR_H #include +#include #include "HexTile.h" #include "Map.h" @@ -12,6 +13,12 @@ class MapGenerator { public: static void generateHexMap(Map& map, int width, int height, float hexRadius) { + // Zufallsgenerator initialisieren (einmal) + std::random_device rd; // Zufälliger Seed + std::mt19937 gen(rd()); // Mersenne Twister Generator + + // Verteilung definieren: hier z.B. 0 bis 9 + std::uniform_real_distribution dis(0.0f, 1.0f); map.tiles.clear(); float xOffset = hexRadius * std::sqrt(3.0f); @@ -29,6 +36,11 @@ public: tile.worldPos = glm::vec3(x, 0.0f, z); tile.radius = hexRadius; + float randomValue = dis(gen); + if (randomValue < 0.5f) { + tile.resourceType = RessourceType::WOOD; + } + map.tiles.push_back(tile); } }