Split InputManager
This commit is contained in:
82
openVulkanoCpp/Input/InputManager.cpp
Normal file
82
openVulkanoCpp/Input/InputManager.cpp
Normal file
@@ -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<InputAction>(actionName);
|
||||
}
|
||||
return action.get();
|
||||
}
|
||||
|
||||
float InputManager::GetAxis(const InputAction* action) const
|
||||
{
|
||||
float value = 0;
|
||||
const std::vector<InputDevice*>& 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<InputDevice*>& 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user