diff --git a/openVulkanoCpp/Input/InputManager.cpp b/openVulkanoCpp/Input/InputManager.cpp new file mode 100644 index 0000000..29425cf --- /dev/null +++ b/openVulkanoCpp/Input/InputManager.cpp @@ -0,0 +1,82 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +#include "InputManager.hpp" +#include "Base/Utils.hpp" + +namespace OpenVulkano::Input +{ + InputManager* InputManager::GetInstance() + { + static InputManager instance; + return &instance; + } + + void InputManager::UnregisterInputDevice(InputDevice* device) + { + Utils::Remove(devices, device); + } + + InputAction* InputManager::GetAction(const std::string& actionName) + { + auto& action = actionNameMapping[actionName]; + if(!action) + { + action = std::make_unique(actionName); + } + return action.get(); + } + + float InputManager::GetAxis(const InputAction* action) const + { + float value = 0; + const std::vector& testDevices = action->GetDevices().empty() ? devices : action->GetDevices(); + for (const InputDevice* device : testDevices) + { + for(InputKey key : action->GetKeys()) + { + value += device->GetAxis(key); + } + for(const auto& keys : action->GetAxisButtons()) + { + value += GetAxis(keys.first) - GetAxis(keys.second); + } + } + return value; + } + + float InputManager::GetAxis(InputKey key) const + { + float value = 0; + for (const InputDevice* device : devices) + { + value += device->GetAxis(key); + } + return value; + } + + bool InputManager::GetButton(InputAction* action) const + { + const std::vector& testDevices = action->GetDevices().empty() ? devices : action->GetDevices(); + for (const InputDevice* device : testDevices) + { + for (const InputKey key : action->GetKeys()) + { + if (device->GetButton(key)) return true; + } + } + return false; + } + + bool InputManager::GetButton(InputKey key) const + { + for(const InputDevice* device : devices) + { + if (device->GetButton(key)) return true; + } + return false; + } +} diff --git a/openVulkanoCpp/Input/InputManager.hpp b/openVulkanoCpp/Input/InputManager.hpp index 2a0064d..170f7a4 100644 --- a/openVulkanoCpp/Input/InputManager.hpp +++ b/openVulkanoCpp/Input/InputManager.hpp @@ -9,23 +9,18 @@ #include "InputDevice.hpp" #include "InputAction.hpp" #include "InputShortcut.hpp" -#include "Base/Utils.hpp" -#include +#include #include #include namespace OpenVulkano::Input { - class InputManager + class InputManager final { InputManager() = default; public: - static InputManager* GetInstance() - { - static InputManager* instance = new InputManager(); - return instance; - } + static InputManager* GetInstance(); void RegisterInputDevice(InputDevice* device) { @@ -33,70 +28,17 @@ namespace OpenVulkano::Input if (!lastActiveDevice) lastActiveDevice = device; } - void UnregisterInputDevice(InputDevice* device) - { - Utils::Remove(devices, device); - } + void UnregisterInputDevice(InputDevice* device); - [[nodiscard]] InputAction* GetAction(const std::string& actionName) - { - auto& action = actionNameMapping[actionName]; - if(!action) - { - action = std::make_unique(actionName); - } - return action.get(); - } + [[nodiscard]] InputAction* GetAction(const std::string& actionName); - [[nodiscard]] float GetAxis(const InputAction* action) const - { - float value = 0; - const std::vector& testDevices = action->GetDevices().empty() ? devices : action->GetDevices(); - for (const InputDevice* device : testDevices) - { - for(InputKey key : action->GetKeys()) - { - value += device->GetAxis(key); - } - for(const auto& keys : action->GetAxisButtons()) - { - value += GetAxis(keys.first) - GetAxis(keys.second); - } - } - return value; - } + [[nodiscard]] float GetAxis(const InputAction* action) const; - [[nodiscard]] float GetAxis(InputKey key) const - { - float value = 0; - for (const InputDevice* device : devices) - { - value += device->GetAxis(key); - } - return value; - } + [[nodiscard]] float GetAxis(InputKey key) const; - [[nodiscard]] bool GetButton(InputAction* action) const - { - const std::vector& testDevices = action->GetDevices().empty() ? devices : action->GetDevices(); - for (const InputDevice* device : testDevices) - { - for (const InputKey key : action->GetKeys()) - { - if (device->GetButton(key)) return true; - } - } - return false; - } + [[nodiscard]] bool GetButton(InputAction* action) const; - [[nodiscard]] bool GetButton(InputKey key) const - { - for(const InputDevice* device : devices) - { - if (device->GetButton(key)) return true; - } - return false; - } + [[nodiscard]] bool GetButton(InputKey key) const; [[nodiscard]] InputDevice* GetLastActiveDevice() const { @@ -104,7 +46,6 @@ namespace OpenVulkano::Input } private: - //std::unordered_map> inputActionMapping; std::unordered_map> actionNameMapping; std::vector devices; InputDevice* lastActiveDevice = nullptr;