mirror of
https://github.com/Nimac0/SDL_Minigame
synced 2026-01-12 15:53:42 +00:00
implemented template function for unbinding actions
This commit is contained in:
parent
ef37e335d2
commit
cf1df70eee
@ -8,7 +8,8 @@
|
|||||||
#include "InputComponent.h"
|
#include "InputComponent.h"
|
||||||
#include "InputAction.h"
|
#include "InputAction.h"
|
||||||
|
|
||||||
class InputSystemComponent : public InputComponent {
|
class InputSystemComponent : public InputComponent
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
InputSystemComponent() = default;
|
InputSystemComponent() = default;
|
||||||
~InputSystemComponent() = default;
|
~InputSystemComponent() = default;
|
||||||
@ -33,7 +34,22 @@ public:
|
|||||||
// (m_keyToActionsMap[keys].push_back(m_actions[actionName]), ...);
|
// (m_keyToActionsMap[keys].push_back(m_actions[actionName]), ...);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
void unbindAction(const std::string& actionName, Key key);
|
// void unbindAction(const std::string& actionName, Key key);
|
||||||
|
|
||||||
|
template<typename... Keys>
|
||||||
|
void unbindAction(const std::string& actionName, Keys... keys)
|
||||||
|
{
|
||||||
|
static_assert((std::is_same<Keys, Key>::value && ...), "A passed argument for 'Keys' is not of type 'Key'");
|
||||||
|
|
||||||
|
auto actionIt = m_actions.find(actionName);
|
||||||
|
if (actionIt != m_actions.end())
|
||||||
|
{
|
||||||
|
auto& action = actionIt->second;
|
||||||
|
(action.keys.erase(std::remove(action.keys.begin(), action.keys.end(), keys), action.keys.end()), ...);
|
||||||
|
(m_keyToActionsMap[keys].erase(std::remove_if(m_keyToActionsMap[keys].begin(), m_keyToActionsMap[keys].end(),
|
||||||
|
[&](const InputAction& a) { return a.actionName == actionName; }), m_keyToActionsMap[keys].end()), ...);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
InputComponent* m_inputComponent;
|
InputComponent* m_inputComponent;
|
||||||
|
|||||||
@ -11,7 +11,7 @@ void InputSystemComponent::update()
|
|||||||
handleActions();
|
handleActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
// alternative to template function
|
// alternative to bindAction template
|
||||||
void InputSystemComponent::bindAction(const std::string& actionName, Key key, std::function<void()> callback)
|
void InputSystemComponent::bindAction(const std::string& actionName, Key key, std::function<void()> callback)
|
||||||
{
|
{
|
||||||
if (m_actions.find(actionName) == m_actions.end())
|
if (m_actions.find(actionName) == m_actions.end())
|
||||||
@ -24,7 +24,7 @@ void InputSystemComponent::bindAction(const std::string& actionName, Key key, st
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// alternative to template function
|
// alternative to bindAction template
|
||||||
void InputSystemComponent::bindAction(const std::string& actionName, std::vector<Key> keys, std::function<void()> callback)
|
void InputSystemComponent::bindAction(const std::string& actionName, std::vector<Key> keys, std::function<void()> callback)
|
||||||
{
|
{
|
||||||
if (m_actions.find(actionName) == m_actions.end())
|
if (m_actions.find(actionName) == m_actions.end())
|
||||||
@ -39,17 +39,17 @@ void InputSystemComponent::bindAction(const std::string& actionName, std::vector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputSystemComponent::unbindAction(const std::string& actionName, Key key)
|
// void InputSystemComponent::unbindAction(const std::string& actionName, Key key)
|
||||||
{
|
// {
|
||||||
auto actionIt = m_actions.find(actionName);
|
// auto actionIt = m_actions.find(actionName);
|
||||||
if (actionIt != m_actions.end())
|
// if (actionIt != m_actions.end())
|
||||||
{
|
// {
|
||||||
auto& action = actionIt->second;
|
// auto& action = actionIt->second;
|
||||||
action.keys.erase(std::remove(action.keys.begin(), action.keys.end(), key), action.keys.end());
|
// action.keys.erase(std::remove(action.keys.begin(), action.keys.end(), key), action.keys.end());
|
||||||
m_keyToActionsMap[key].erase(std::remove_if(m_keyToActionsMap[key].begin(), m_keyToActionsMap[key].end(),
|
// m_keyToActionsMap[key].erase(std::remove_if(m_keyToActionsMap[key].begin(), m_keyToActionsMap[key].end(),
|
||||||
[&](const InputAction& a) { return a.name == actionName; }), m_keyToActionsMap[key].end());
|
// [&](const InputAction& a) { return a.name == actionName; }), m_keyToActionsMap[key].end());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
void InputSystemComponent::handleActions()
|
void InputSystemComponent::handleActions()
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user