/* * 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; } void InputManager::Tick() { for(InputDevice* device : devices) { device->Tick(); } } }