diff --git a/core/input/manager.cpp b/core/input/manager.cpp new file mode 100644 index 0000000..41df9b5 --- /dev/null +++ b/core/input/manager.cpp @@ -0,0 +1,26 @@ +#include "manager.hpp" + +namespace hibis { + InputManager::InputManager() {} + InputManager::~InputManager() {} + + bool InputManager::isKeyPressed(int scancode) { + if (mKeyScancodes.find(scancode) != mKeyScancodes.end()) return (mKeyScancodes[scancode] == Pressed || mKeyScancodes[scancode] == Held); + else return false; + } + + bool InputManager::isKeyJustPressed(int scancode) { + if (mKeyScancodes.find(scancode) != mKeyScancodes.end()) return mKeyScancodes[scancode] == Pressed; + else return false; + } + + bool InputManager::isKeyJustReleased(int scancode) { + if (mKeyScancodes.find(scancode) != mKeyScancodes.end()) return mKeyScancodes[scancode] == Released; + else return false; + } + + + void InputManager::setKeyPressState(int scancode, PressTypes type) { + mKeyScancodes[scancode] = type; + } +} diff --git a/core/input/manager.hpp b/core/input/manager.hpp new file mode 100644 index 0000000..b2d4291 --- /dev/null +++ b/core/input/manager.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +#include "presstypes.hpp" + +namespace hibis { + class InputManager final { + public: + InputManager(); + ~InputManager(); + + bool isKeyPressed(int scancode); + bool isKeyJustPressed(int scancode); + bool isKeyJustReleased(int scancode); + + void setKeyPressState(int scancode, PressTypes type); + private: + std::map mKeyScancodes; + }; +} diff --git a/core/input/presstypes.hpp b/core/input/presstypes.hpp new file mode 100644 index 0000000..90323f2 --- /dev/null +++ b/core/input/presstypes.hpp @@ -0,0 +1,11 @@ +#pragma once + +namespace hibis { + enum PressTypes { + Unpressed, + Pressed, + Held, + Released, + Unknown = __INT32_MAX__ + }; +} diff --git a/core/renderer/renderer.cpp b/core/renderer/renderer.cpp index 1472e35..f29b769 100644 --- a/core/renderer/renderer.cpp +++ b/core/renderer/renderer.cpp @@ -1,5 +1,5 @@ #include "renderer.hpp" namespace hibis { - Renderer::Renderer(LoggerCallback logger) : mLogger(logger) {} + Renderer::Renderer(LoggerCallback logger) : mLogger(logger), mInputManager() {} } diff --git a/core/renderer/renderer.hpp b/core/renderer/renderer.hpp index 17131d0..cc3286c 100644 --- a/core/renderer/renderer.hpp +++ b/core/renderer/renderer.hpp @@ -2,6 +2,7 @@ #include +#include "../input/manager.hpp" #include "../math/types.hpp" #include "../resources/resource.hpp" #include "../resources/shader.hpp" @@ -36,6 +37,7 @@ namespace hibis { bool mKeepOpen = true; LoggerCallback mLogger; + InputManager mInputManager; protected: bool mIsWireframeMode = false; };