diff --git a/.gitmodules b/.gitmodules
index d94eda4..f965af7 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,6 +4,3 @@
[submodule "lib/glm"]
path = lib/glm
url = https://github.com/g-truc/glm.git
-[submodule "lib/tinyobjloader"]
- path = lib/tinyobjloader
- url = https://github.com/tinyobjloader/tinyobjloader.git
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 39268c1..b75e802 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -4,5 +4,6 @@
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f04234c..3db3f68 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -32,8 +32,8 @@ add_executable(Dicewars_Siedler src/main.cpp
src/engine/renderer/Renderer.h
src/engine/layer/Layer.cpp
src/engine/layer/Layer.h
- src/engine/layer/GameLayer.cpp
- src/engine/layer/GameLayer.h
+ src/game/GameLayer.cpp
+ src/game/GameLayer.h
src/engine/renderer/shaders/ShaderProgram.cpp
src/engine/renderer/shaders/ShaderProgram.h
src/engine/renderer/shaders/StaticShader.cpp
@@ -58,6 +58,13 @@ add_executable(Dicewars_Siedler src/main.cpp
src/engine/layer/entities/Light.h
src/engine/platform/glfw/MousePicker.cpp
src/engine/platform/glfw/MousePicker.h
+ src/game/hexWorld/HexTile.h
+ src/game/hexWorld/Map.cpp
+ src/game/hexWorld/Map.h
+ src/game/hexWorld/MapGenerator.cpp
+ src/game/hexWorld/MapGenerator.h
+ src/game/hexWorld/HexModelFactory.cpp
+ src/game/hexWorld/HexModelFactory.h
)
target_include_directories(Dicewars_Siedler PRIVATE
diff --git a/assets/dragon/dragon.png b/assets/dragon/dragon.png
new file mode 100644
index 0000000..1d78510
Binary files /dev/null and b/assets/dragon/dragon.png differ
diff --git a/src/engine/layer/entities/Camera.h b/src/engine/layer/entities/Camera.h
index ab32baf..3050b1d 100644
--- a/src/engine/layer/entities/Camera.h
+++ b/src/engine/layer/entities/Camera.h
@@ -11,7 +11,7 @@
class Camera {
private:
- glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f);
+ glm::vec3 position = glm::vec3(0.0f, 5.0f, 0.0f);
float pitch = 0.0f;
float yaw = 0.0f;
float roll = 0.0f;
diff --git a/src/engine/renderer/Renderer.cpp b/src/engine/renderer/Renderer.cpp
index e860658..8b6daa2 100644
--- a/src/engine/renderer/Renderer.cpp
+++ b/src/engine/renderer/Renderer.cpp
@@ -4,6 +4,7 @@
#include "Renderer.h"
+#include "../../game/hexWorld/HexTile.h"
#include "../core/Application.h"
#include "../layer/entities/Light.h"
#include "../toolbox/MathUtils.h"
@@ -25,13 +26,38 @@ void Renderer::prepare(const Camera& camera, const Light& light) {
staticShader.stop();
}
-void Renderer::renderFrame(const Entity &entity, const Camera& camera, const Light& light) {
+void Renderer::renderFrame(const Entity &entity, const Camera& camera, const Light& light, const std::vector& terrain) {
prepare(camera, light);
staticShader.start();
renderRawModel(entity);
+ for (const auto& terrainTile : terrain) {
+ renderHexTile(terrainTile);
+ }
staticShader.stop();
}
+void Renderer::renderHexTile(const HexRenderData& tile) {
+ auto texturedModel = tile.model;
+ auto model = texturedModel->getRawModel();
+
+ glBindVertexArray(model->vaoID);
+ glEnableVertexAttribArray(0);
+ glEnableVertexAttribArray(1);
+ glEnableVertexAttribArray(2);
+
+ glm::mat4 transformationMatrix = MathUtils::createTransformationMatrix(tile.position, 0, 0, 0, 1.f);
+ staticShader.loadTransformationMatrix(transformationMatrix);
+
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, texturedModel->getTexture()->getTextureID());
+ glDrawElements(GL_TRIANGLES , model->vertexCount, GL_UNSIGNED_INT, 0);
+
+ glDisableVertexAttribArray(0);
+ glDisableVertexAttribArray(1);
+ glDisableVertexAttribArray(2);
+ glBindVertexArray(0);
+}
+
void Renderer::renderRawModel(const Entity& entity) {
auto texturedModel = entity.getModel();
auto model = texturedModel->getRawModel();
diff --git a/src/engine/renderer/Renderer.h b/src/engine/renderer/Renderer.h
index 1ba7fa2..6da20e6 100644
--- a/src/engine/renderer/Renderer.h
+++ b/src/engine/renderer/Renderer.h
@@ -4,12 +4,14 @@
#ifndef DICEWARS_SIEDLER_RENDERER_H
#define DICEWARS_SIEDLER_RENDERER_H
+#include "../../game/hexWorld/HexTile.h"
#include "../layer/entities/Entity.h"
#include "model/RawModel.h"
#include "model/TexturedModel.h"
#include "shaders/StaticShader.h"
+
class Light;
class Camera;
@@ -21,7 +23,10 @@ public:
staticShader.stop();
};
void prepare(const ::Camera &camera, const Light& light);
- void renderFrame(const ::Entity &entity, const ::Camera &camera, const Light& light);
+ void renderFrame(const ::Entity &entity, const ::Camera &camera, const ::Light &light, const std::vector &terrainTiles);
+
+ void renderHexTile(const HexRenderData &tile);
+
[[nodiscard]] glm::mat4 getProjectionMatrix() const {return projectionMatrix;}
private:
void renderRawModel(const Entity &entity);
diff --git a/src/game/DicewarsApp.cpp b/src/game/DicewarsApp.cpp
index a15d92d..a8c80c7 100644
--- a/src/game/DicewarsApp.cpp
+++ b/src/game/DicewarsApp.cpp
@@ -4,7 +4,7 @@
#include "DicewarsApp.h"
-#include "../engine/layer/GameLayer.h"
+#include "GameLayer.h"
DicewarsApp::DicewarsApp() {
pushLayer(new GameLayer());
diff --git a/src/engine/layer/GameLayer.cpp b/src/game/GameLayer.cpp
similarity index 51%
rename from src/engine/layer/GameLayer.cpp
rename to src/game/GameLayer.cpp
index ec0acab..bcbed58 100644
--- a/src/engine/layer/GameLayer.cpp
+++ b/src/game/GameLayer.cpp
@@ -4,13 +4,15 @@
#include "GameLayer.h"
-#include "../platform/glfw/InputManager.h"
-#include "../renderer/Renderer.h"
-#include "../renderer/loader/OBJLoader.h"
-#include "../renderer/model/TexturedModel.h"
-#include "../renderer/textures/ModelTexture.h"
-#include "../toolbox/MathUtils.h"
-#include "entities/Light.h"
+#include "../engine/platform/glfw/InputManager.h"
+#include "../engine/renderer/Renderer.h"
+#include "../engine/renderer/loader/OBJLoader.h"
+#include "../engine/renderer/model/TexturedModel.h"
+#include "../engine/renderer/textures/ModelTexture.h"
+#include "../engine/toolbox/MathUtils.h"
+#include "../engine/layer/entities/Light.h"
+#include "hexWorld/HexModelFactory.h"
+#include "hexWorld/MapGenerator.h"
GameLayer::GameLayer() :texturedModel(0,0) //Platzhalter, echtes Model kommt in onAttach
{
@@ -18,30 +20,17 @@ GameLayer::GameLayer() :texturedModel(0,0) //Platzhalter, echtes Model kommt in
void GameLayer::onAttach()
{
- std::vector vertices = {
- -0.5f, 0.5f, 0.f,//v0
- -0.5f, -0.5f, 0.f,//v1
- 0.5f, -0.5f, 0.f,//v2
- 0.5f, 0.5f, 0.f,//v3
- };
-
- std::vector indices = {
- 0,1,3,
- 3,1,2
- };
-
- std::vector textureCoords = {
- 0,0, //v0
- 0,1, // v1
- 1,1, // v2
- 1,0 //v3
- };
-
texturedModel = *OBJLoader::loadModel("assets/dragon/dragon.obj", "assets/dragon/dragon.png", loader);
entity = std::make_unique(Entity(std::make_shared(texturedModel), glm::vec3(0,0,-25), 0,0,0, 1.f));
camera = std::make_unique();
- light = std::make_unique(glm::vec3(0,0,-20), glm::vec3(1,1,1));
+ light = std::make_unique(glm::vec3(0,10,0), glm::vec3(1,1,1));
mousePicker = std::make_unique(renderer.getProjectionMatrix(), MathUtils::createViewMatrix(*camera));
+
+ //Map Generation
+ hexModel = std::make_shared(HexModelFactory::createTexturedHexModel(loader));
+ map = std::make_unique