mirror of
https://github.com/Nimac0/SDL_Minigame
synced 2026-01-12 07:53:43 +00:00
feat: added context for input actions (bug: issue with context switching)
This commit is contained in:
parent
b6cba94323
commit
a130d865dd
@ -100,6 +100,7 @@ public:
|
||||
std::string name;
|
||||
std::vector<Key> bindings;
|
||||
std::function<void()> callback;
|
||||
std::string context;
|
||||
};
|
||||
|
||||
InputManager();
|
||||
@ -107,11 +108,15 @@ public:
|
||||
|
||||
void init(); // see if necessary
|
||||
void processEvents();
|
||||
void registerAction(const std::string& actionName, const std::vector<Key>& keys, std::function<void()> callback);
|
||||
void registerAction(const std::string& actionName, const std::vector<Key>& keys, std::function<void()> callback, const std::string& context);
|
||||
|
||||
void setActiveContext(const std::string& context);
|
||||
std::string getActiveContext() const;
|
||||
|
||||
private:
|
||||
std::vector<InputAction> actions;
|
||||
std::map<Key, SDL_Scancode> keyMap;
|
||||
std::string activeContext;
|
||||
|
||||
void initKeyMap();
|
||||
void handleEvent(const SDL_Event& event);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#include "InputManager.h"
|
||||
#include <iostream>
|
||||
|
||||
InputManager::InputManager() {
|
||||
InputManager::InputManager() : activeContext("Default") {
|
||||
initKeyMap();
|
||||
}
|
||||
|
||||
@ -100,8 +100,17 @@ void InputManager::initKeyMap() {
|
||||
};
|
||||
}
|
||||
|
||||
void InputManager::registerAction(const std::string& actionName, const std::vector<Key>& keys, std::function<void()> callback) {
|
||||
actions.push_back({actionName, keys, callback});
|
||||
void InputManager::registerAction(const std::string& actionName, const std::vector<Key>& keys, std::function<void()> callback, const std::string& context) {
|
||||
actions.push_back({actionName, keys, callback, context});
|
||||
}
|
||||
|
||||
void InputManager::setActiveContext(const std::string& context) {
|
||||
activeContext = context;
|
||||
std::cout << "Active context set to: " << activeContext << std::endl;
|
||||
}
|
||||
|
||||
std::string InputManager::getActiveContext() const {
|
||||
return activeContext;
|
||||
}
|
||||
|
||||
void InputManager::processEvents() {
|
||||
@ -116,10 +125,20 @@ void InputManager::handleEvent(const SDL_Event& event) {
|
||||
if (event.type != SDL_EVENT_KEY_DOWN) return; // TODO: add other events if necessary
|
||||
|
||||
for (const auto& action : actions) {
|
||||
std::cout << "Processing action " << action.name
|
||||
<< " with context " << action.context
|
||||
<< " (Active context: " << activeContext << ")" << std::endl;
|
||||
|
||||
if (action.context != activeContext) {
|
||||
std::cout << "Skipping action: " << action.name << std::endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const auto& binding : action.bindings) {
|
||||
if (event.key.scancode == keyMap[binding]) {
|
||||
std::cout << "Action triggered: " << action.name << std::endl;
|
||||
if (event.key.scancode == keyMap[binding] && action.context == activeContext) {
|
||||
std::cout << "Action triggered: " << action.name << " in context: " << action.context << std::endl;
|
||||
action.callback();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user