#pragma once #include #include #include #include "Component.h" #include "InputComponent.h" #include "InputAction.h" class InputSystemComponent : public InputComponent { public: InputSystemComponent() = default; ~InputSystemComponent() = default; void init() override; void update() override; // void bindAction(const std::string& actionName, Key key, std::function callback); template void bindAction(const std::string& actionName, std::function callback, Keys... keys) { static_assert((std::is_same::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); private: InputComponent* m_inputComponent; std::map> m_keyToActionsMap; std::map m_actions; void handleActions(); };