0
0
mirror of https://github.com/Nimac0/SDL_Minigame synced 2026-01-12 15:53:42 +00:00

Compare commits

..

4 Commits

Author SHA1 Message Date
ezveee
18c722d07d added alternative to unbindAction template function 2024-06-23 15:48:01 +02:00
Sara Varga
cf1df70eee implemented template function for unbinding actions 2024-06-23 14:29:30 +02:00
Sara Varga
ef37e335d2 added alternative to bindAction template function 2024-06-23 14:13:31 +02:00
Sara Varga
de74ca1307 Implemented template function for binding actions 2024-06-23 13:56:02 +02:00
2 changed files with 67 additions and 1 deletions

View File

@ -8,7 +8,8 @@
#include "InputComponent.h"
#include "InputAction.h"
class InputSystemComponent : public InputComponent {
class InputSystemComponent : public InputComponent
{
public:
InputSystemComponent() = default;
~InputSystemComponent() = default;
@ -17,7 +18,39 @@ public:
void update() override;
void bindAction(const std::string& actionName, Key key, std::function<void()> callback);
void bindAction(const std::string& actionName, std::vector<Key> keys, std::function<void()> callback);
// template<typename... Keys>
// void bindAction(const std::string& actionName, std::function<void()> callback, Keys... keys)
// {
// static_assert((std::is_same<Keys, Key>::value && ...), "A passed argument for 'Keys' is not of type 'Key'");
// if (m_actions.find(actionName) == m_actions.end())
// {
// m_actions[actionName] = InputAction(actionName, callback);
// }
// (m_actions[actionName].keys.push_back(keys), ...);
// (m_keyToActionsMap[keys].push_back(m_actions[actionName]), ...);
// }
void unbindAction(const std::string& actionName, Key key);
void unbindAction(const std::string& actionName, std::vector<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:
InputComponent* m_inputComponent;

View File

@ -11,6 +11,7 @@ void InputSystemComponent::update()
handleActions();
}
// alternative to bindAction template
void InputSystemComponent::bindAction(const std::string& actionName, Key key, std::function<void()> callback)
{
if (m_actions.find(actionName) == m_actions.end())
@ -23,6 +24,22 @@ void InputSystemComponent::bindAction(const std::string& actionName, Key key, st
}
// alternative to bindAction template
void InputSystemComponent::bindAction(const std::string& actionName, std::vector<Key> keys, std::function<void()> callback)
{
if (m_actions.find(actionName) == m_actions.end())
{
m_actions[actionName] = InputAction(actionName, callback);
}
for (Key key : keys)
{
m_actions[actionName].keys.push_back(key);
m_keyToActionsMap[key].push_back(m_actions[actionName]);
}
}
// alternative to unbindAction template
void InputSystemComponent::unbindAction(const std::string& actionName, Key key)
{
auto actionIt = m_actions.find(actionName);
@ -35,6 +52,22 @@ void InputSystemComponent::unbindAction(const std::string& actionName, Key key)
}
}
// alternative to unbindAction template
void InputSystemComponent::unbindAction(const std::string& actionName, const std::vector<Key>& keysToRemove)
{
for (Key key : keysToRemove)
{
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(), key), action.keys.end());
m_keyToActionsMap[key].erase(std::remove_if(m_keyToActionsMap[key].begin(), m_keyToActionsMap[key].end(),
[&](const InputAction& a) { return a.actionName == actionName; }), m_keyToActionsMap[key].end());
}
}
}
void InputSystemComponent::handleActions()
{
for (auto& keyActionsPair : m_keyToActionsMap)