ADD: Forest Tiles
This commit is contained in:
parent
3cc8d6e0b1
commit
66f7d112a1
@ -27,7 +27,8 @@ void GameLayer::onAttach()
|
|||||||
mousePicker = std::make_unique<MousePicker>(renderer->getProjectionMatrix(), MathUtils::createViewMatrix(*camera));
|
mousePicker = std::make_unique<MousePicker>(renderer->getProjectionMatrix(), MathUtils::createViewMatrix(*camera));
|
||||||
|
|
||||||
//Map Generation
|
//Map Generation
|
||||||
hexModel = std::make_shared<TexturedModel>(HexModelFactory::createTexturedHexModel(loader));
|
hexModelDefault = std::make_shared<TexturedModel>(HexModelFactory::createTexturedHexModel(loader, 1.0f, RessourceType::NONE));
|
||||||
|
hexModelWood = std::make_shared<TexturedModel>(HexModelFactory::createTexturedHexModel(loader, 1.0f, RessourceType::WOOD));
|
||||||
map = std::make_unique<Map>();
|
map = std::make_unique<Map>();
|
||||||
MapGenerator::generateHexMap(*map, 10,10,1.f);
|
MapGenerator::generateHexMap(*map, 10,10,1.f);
|
||||||
printf("Generated Terrain with %lu Tiles!\n", map->tiles.size());
|
printf("Generated Terrain with %lu Tiles!\n", map->tiles.size());
|
||||||
@ -61,7 +62,7 @@ void GameLayer::onUpdate()
|
|||||||
tile.isHighlighted = highlight;
|
tile.isHighlighted = highlight;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<HexRenderData> terrainRenderData = map->getTerrainRenderData(hexModel);
|
std::vector<HexRenderData> terrainRenderData = map->getTerrainRenderData(hexModelDefault, hexModelWood);
|
||||||
|
|
||||||
|
|
||||||
for (auto& renderData : terrainRenderData) {
|
for (auto& renderData : terrainRenderData) {
|
||||||
|
|||||||
@ -32,7 +32,8 @@ private:
|
|||||||
std::unique_ptr<MousePicker> mousePicker;
|
std::unique_ptr<MousePicker> mousePicker;
|
||||||
std::unique_ptr<MasterRenderer> renderer = std::make_unique<MasterRenderer>();
|
std::unique_ptr<MasterRenderer> renderer = std::make_unique<MasterRenderer>();
|
||||||
|
|
||||||
std::shared_ptr<TexturedModel> hexModel;
|
std::shared_ptr<TexturedModel> hexModelDefault;
|
||||||
|
std::shared_ptr<TexturedModel> hexModelWood;
|
||||||
std::unique_ptr<Map> map;
|
std::unique_ptr<Map> map;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -48,8 +48,15 @@ RawModel HexModelFactory::createHexRawModel(Loader &loader, float radius) {
|
|||||||
return loader.loadToVAO(vertices, normals, uvs, indices);
|
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);
|
RawModel rawModel = createHexRawModel(loader, radius);
|
||||||
ModelTexture modelTexture = loader.loadTextureFromFile("assets/hex/white.png");
|
|
||||||
return {std::make_shared<RawModel>(rawModel), std::make_shared<ModelTexture>(modelTexture)};
|
std::shared_ptr<ModelTexture> modelTexture;
|
||||||
|
if (ressourceType == RessourceType::NONE) {
|
||||||
|
modelTexture = std::make_shared<ModelTexture>(loader.loadTextureFromFile("assets/hex/white.png"));
|
||||||
|
} else {
|
||||||
|
modelTexture = std::make_shared<ModelTexture>(loader.loadTextureFromFile("assets/hex/wood/Ground053_1K-JPG_Color.jpg"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return {std::make_shared<RawModel>(rawModel), std::move(modelTexture)};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#ifndef HEXMODELFACTORY_H
|
#ifndef HEXMODELFACTORY_H
|
||||||
#define HEXMODELFACTORY_H
|
#define HEXMODELFACTORY_H
|
||||||
|
#include "HexTile.h"
|
||||||
#include "../../engine/renderer/model/RawModel.h"
|
#include "../../engine/renderer/model/RawModel.h"
|
||||||
#include "../../engine/renderer/model/TexturedModel.h"
|
#include "../../engine/renderer/model/TexturedModel.h"
|
||||||
|
|
||||||
@ -13,7 +14,7 @@ class Loader;
|
|||||||
class HexModelFactory {
|
class HexModelFactory {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static TexturedModel createTexturedHexModel(Loader& loader, float radius = 1.0f);
|
static TexturedModel createTexturedHexModel(Loader& loader, float radius, RessourceType ressourceType);
|
||||||
private:
|
private:
|
||||||
static RawModel createHexRawModel(Loader& loader, float radius = 1.0f);
|
static RawModel createHexRawModel(Loader& loader, float radius = 1.0f);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -11,11 +11,16 @@
|
|||||||
#include "glm/vec3.hpp"
|
#include "glm/vec3.hpp"
|
||||||
#include "glm/ext/quaternion_geometric.hpp"
|
#include "glm/ext/quaternion_geometric.hpp"
|
||||||
|
|
||||||
|
enum class RessourceType {
|
||||||
|
NONE,
|
||||||
|
WOOD
|
||||||
|
};
|
||||||
|
|
||||||
struct HexTile {
|
struct HexTile {
|
||||||
glm::vec3 worldPos;
|
glm::vec3 worldPos;
|
||||||
int q, r; //Axiale Koordinaten (hex-Koordinaten)
|
int q, r; //Axiale Koordinaten (hex-Koordinaten)
|
||||||
int ownerID = -1;
|
int ownerID = -1;
|
||||||
//Later: ResourceType
|
RessourceType resourceType = RessourceType::NONE;
|
||||||
float radius;
|
float radius;
|
||||||
bool isHighlighted = false;
|
bool isHighlighted = false;
|
||||||
|
|
||||||
|
|||||||
@ -4,11 +4,16 @@
|
|||||||
|
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
|
|
||||||
std::vector<HexRenderData> Map::getTerrainRenderData(const std::shared_ptr<TexturedModel>& hexModel) {
|
std::vector<HexRenderData> Map::getTerrainRenderData(const std::shared_ptr<TexturedModel>& hexModel, const std::shared_ptr<TexturedModel>& woodModel) {
|
||||||
std::vector<HexRenderData> renderData;
|
std::vector<HexRenderData> renderData;
|
||||||
renderData.reserve(tiles.size());
|
renderData.reserve(tiles.size());
|
||||||
for (auto& tile : tiles) {
|
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);
|
renderData.push_back(data);
|
||||||
}
|
}
|
||||||
return renderData;
|
return renderData;
|
||||||
|
|||||||
@ -16,7 +16,7 @@ public:
|
|||||||
std::vector<Area> areas;
|
std::vector<Area> areas;
|
||||||
std::vector<HexTile> tiles;
|
std::vector<HexTile> tiles;
|
||||||
|
|
||||||
std::vector<HexRenderData> getTerrainRenderData(const std::shared_ptr<TexturedModel>& hexModel);
|
std::vector<HexRenderData> getTerrainRenderData(const std::shared_ptr<TexturedModel> &hexModel, const std::shared_ptr<TexturedModel> &woodModel);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
#ifndef MAPGENERATOR_H
|
#ifndef MAPGENERATOR_H
|
||||||
#define MAPGENERATOR_H
|
#define MAPGENERATOR_H
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <random>
|
||||||
|
|
||||||
#include "HexTile.h"
|
#include "HexTile.h"
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
@ -12,6 +13,12 @@
|
|||||||
class MapGenerator {
|
class MapGenerator {
|
||||||
public:
|
public:
|
||||||
static void generateHexMap(Map& map, int width, int height, float hexRadius) {
|
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<float> dis(0.0f, 1.0f);
|
||||||
map.tiles.clear();
|
map.tiles.clear();
|
||||||
|
|
||||||
float xOffset = hexRadius * std::sqrt(3.0f);
|
float xOffset = hexRadius * std::sqrt(3.0f);
|
||||||
@ -29,6 +36,11 @@ public:
|
|||||||
tile.worldPos = glm::vec3(x, 0.0f, z);
|
tile.worldPos = glm::vec3(x, 0.0f, z);
|
||||||
tile.radius = hexRadius;
|
tile.radius = hexRadius;
|
||||||
|
|
||||||
|
float randomValue = dis(gen);
|
||||||
|
if (randomValue < 0.5f) {
|
||||||
|
tile.resourceType = RessourceType::WOOD;
|
||||||
|
}
|
||||||
|
|
||||||
map.tiles.push_back(tile);
|
map.tiles.push_back(tile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user