diff --git a/assets/map/states.map b/assets/map/states.map index 8f40f94..cdec31f 100644 Binary files a/assets/map/states.map and b/assets/map/states.map differ diff --git a/engine-api/include/ee_engine_api/InputInterface.hpp b/engine-api/include/ee_engine_api/InputInterface.hpp new file mode 100644 index 0000000..ca9ee43 --- /dev/null +++ b/engine-api/include/ee_engine_api/InputInterface.hpp @@ -0,0 +1,23 @@ +#pragma once +#include + +namespace ee_engine +{ + struct InputHandlers + { + std::function zooming; + std::function mapScroll; + }; + + class IInput + { + public: + virtual ~IInput() {}; + virtual void Poll() = 0; + + protected: + InputHandlers handlers; + + explicit IInput(const InputHandlers &handlers) {this->handlers = handlers;}; + }; +} \ No newline at end of file diff --git a/engine-api/include/ee_engine_api/RenderInterface.hpp b/engine-api/include/ee_engine_api/RenderInterface.hpp index 58f5c68..06ac6a6 100644 --- a/engine-api/include/ee_engine_api/RenderInterface.hpp +++ b/engine-api/include/ee_engine_api/RenderInterface.hpp @@ -38,6 +38,8 @@ namespace ee_engine virtual void ResizeWindow(int width, int height); void SetCamera(const CameraTransform &camera); + + CameraTransform getCamera(); protected: int screenWidth, screenHeight; diff --git a/engine-api/src/RenderInterface.cpp b/engine-api/src/RenderInterface.cpp index 6fc6c7e..1c886eb 100644 --- a/engine-api/src/RenderInterface.cpp +++ b/engine-api/src/RenderInterface.cpp @@ -65,4 +65,6 @@ void ee_engine::IRenderer::SetCamera(const CameraTransform &camera) viewProjection = P * V; ApplyCamera(); -} \ No newline at end of file +} + +ee_engine::CameraTransform ee_engine::IRenderer::getCamera() {return this->camera;} \ No newline at end of file diff --git a/engine/include/Actions.hpp b/engine/include/Actions.hpp new file mode 100644 index 0000000..4a7ff4d --- /dev/null +++ b/engine/include/Actions.hpp @@ -0,0 +1,14 @@ +#pragma once +#include + +class Actions +{ +public: + static ee_engine::InputHandlers mappings; + +private: + static void Zoom(float dx, float dy); + static void MapScroll(float dx, float dy); + + Actions(); +}; \ No newline at end of file diff --git a/engine/include/Engine.hpp b/engine/include/Engine.hpp index 9d7b45b..8032060 100644 --- a/engine/include/Engine.hpp +++ b/engine/include/Engine.hpp @@ -1,12 +1,15 @@ #pragma once +#include #include - +#include #include "AssetManager.hpp" class Engine { public: + static GLFWwindow *window; + static ee_engine::IInput *input; static AssetManager *assetManager; static ee_engine::IRenderer *renderer; diff --git a/engine/include/GLFWInput.hpp b/engine/include/GLFWInput.hpp new file mode 100644 index 0000000..755cfa0 --- /dev/null +++ b/engine/include/GLFWInput.hpp @@ -0,0 +1,10 @@ +#pragma once +#include +#include + +class GLFWInput : public ee_engine::IInput +{ +public: + GLFWInput(ee_engine::InputHandlers handlers); + void Poll() override; +}; \ No newline at end of file diff --git a/engine/src/Actions.cpp b/engine/src/Actions.cpp new file mode 100644 index 0000000..76da11e --- /dev/null +++ b/engine/src/Actions.cpp @@ -0,0 +1,20 @@ +#include "Actions.hpp" +#include "Engine.hpp" +#include + +ee_engine::InputHandlers Actions::mappings { + .zooming = Zoom, + .mapScroll = MapScroll +}; + +void Actions::Zoom(float dx, float dy) +{ + ee_engine::CameraTransform cam = Engine::renderer->getCamera(); + cam.zoom *= pow(1.1f, -dy); + Engine::renderer->SetCamera(cam); +} + +void Actions::MapScroll(float dx, float dy) +{ + +} \ No newline at end of file diff --git a/engine/src/Engine.cpp b/engine/src/Engine.cpp index 683a2c9..f4a47b8 100644 --- a/engine/src/Engine.cpp +++ b/engine/src/Engine.cpp @@ -1,11 +1,17 @@ #include "Engine.hpp" #include +GLFWwindow* Engine::window; + +ee_engine::IInput* Engine::input; AssetManager* Engine::assetManager; ee_engine::IRenderer* Engine::renderer; void Engine::Shutdown() { + if (input != nullptr) + Deallocate(input); + if (renderer != nullptr) { renderer->Shutdown(); @@ -13,13 +19,14 @@ void Engine::Shutdown() } renderer = nullptr; - if (Engine::assetManager != nullptr) - { // Wait for asset manager to clean and shutdown - Engine::assetManager->Shutdown(); - while(Engine::assetManager->isRunning.load()); - } - if (assetManager != nullptr) + { // Wait for asset manager to clean and shutdown + assetManager->Shutdown(); + while(assetManager->isRunning.load()) {} Deallocate(assetManager); + } assetManager = nullptr; + + glfwDestroyWindow(window); + glfwTerminate(); } \ No newline at end of file diff --git a/engine/src/GLFWInput.cpp b/engine/src/GLFWInput.cpp new file mode 100644 index 0000000..68e9028 --- /dev/null +++ b/engine/src/GLFWInput.cpp @@ -0,0 +1,20 @@ +#include "GLFWInput.hpp" +#include "Engine.hpp" +#include "Logger.h" + +GLFWInput::GLFWInput(ee_engine::InputHandlers handlers) : ee_engine::IInput(handlers) +{ + glfwSetWindowUserPointer(Engine::window, this); + + glfwSetScrollCallback(Engine::window, [](GLFWwindow *window, double dx, double dy) { + reinterpret_cast(glfwGetWindowUserPointer(window))-> + handlers.zooming(static_cast(dx), static_cast(dy)); + }); + + LOG(INFO, "Input mappings initialized"); +} + +void GLFWInput::Poll() +{ + +} \ No newline at end of file diff --git a/engine/src/main.cpp b/engine/src/main.cpp index 28f664d..4b26aa9 100644 --- a/engine/src/main.cpp +++ b/engine/src/main.cpp @@ -4,6 +4,8 @@ #include #include "compile_config.hpp" +#include "GLFWInput.hpp" +#include "Actions.hpp" #include "Engine.hpp" #include @@ -33,6 +35,7 @@ int main(int argc, char **argv) else LOG(INFO, "GLFW Window created"); glfwMakeContextCurrent(window); + Engine::window = window; // Setup Asset Manager Engine::assetManager = Allocate(); @@ -43,6 +46,9 @@ int main(int argc, char **argv) // Load assets Engine::assetManager->LoadAsync(AssetInfo::MAP_MESH, "assets/map/states.map"); + // Setup input manager TODO: builder + Engine::input = Allocate(Actions::mappings); + // Setup renderer TODO: builder Engine::renderer = reinterpret_cast(Allocate(window)); @@ -61,7 +67,7 @@ int main(int argc, char **argv) Engine::renderer->Init(); Engine::renderer->SetCamera({ - .position = {1000.0f, 1000.0f}, + //.position = {1000.0f, 1000.0f}, .zoom = 2000.0f }); @@ -75,14 +81,13 @@ int main(int argc, char **argv) Engine::renderer->Draw(); glfwSwapBuffers(window); + Engine::input->Poll(); glfwPollEvents(); } // Free memory LOG(INFO, "Exit..."); Engine::Shutdown(); - glfwDestroyWindow(window); - glfwTerminate(); //TODO: check Unregister in other threads and make threaded module base class Logger::trace->Unregister_Thread(0); Logger::trace->Release(); diff --git a/sdk/map/__states.bmp b/sdk/map/__states.bmp deleted file mode 100644 index 2f210e3..0000000 Binary files a/sdk/map/__states.bmp and /dev/null differ diff --git a/sdk/map/_states.bmp b/sdk/map/_states.bmp new file mode 100644 index 0000000..08feca0 Binary files /dev/null and b/sdk/map/_states.bmp differ diff --git a/sdk/map/states.bmp b/sdk/map/states.bmp index 08feca0..2f210e3 100644 Binary files a/sdk/map/states.bmp and b/sdk/map/states.bmp differ