21 #include <ControlsManager.h> 24 #include <ControlStatus.h> 36 ControlsManager::ControlsManager() { }
37 ControlsManager::~ControlsManager() {
38 for(
auto i = functions.begin(); i!= functions.end() ; i++)
39 for(
auto j = i->second.begin() ; j != i->second.end() ; j++)
44 functions = std::map<int,std::vector<Input*>>();
52 functionCollection::iterator elem = functions.find(
function);
53 if(elem == functions.end()){
54 addBindingsForNewFunction(
function,buttons);
56 addBindingsForExistingFunction(
function,buttons,elem->second);
60 void ControlsManager::addBindingsForNewFunction(
int function, std::initializer_list<Input *> buttons) {
61 std::vector<Input *> list;
62 bool firstDuality = (*buttons.begin())->isDual();
63 for (
auto it = buttons.begin(); it != buttons.end(); it++) {
64 if((*it)->isDual() != firstDuality)
65 throw "The duality of the bindings were different for function " + std::to_string(
function) +
".";
66 list.insert(list.end(), *it);
68 functions.insert(std::pair<
int,std::vector<Input*>>(
function,list));
71 void ControlsManager::addBindingsForExistingFunction(
int function, std::initializer_list<Input *> buttons,
72 std::vector<Input *> bindings) {
73 bool shouldBeDual = bindings.front()->isDual();
74 for (
auto it = buttons.begin(); it != buttons.end(); it++) {
75 if((*it)->isDual() != shouldBeDual)
76 throw (
"The function " + std::to_string(
function) +
" is " + (shouldBeDual ?
"" :
"not ") +
77 "dual but a binding was " + (!shouldBeDual ?
"not " :
"") +
"dual.");
78 removeBindingsWithActivator(&bindings, (*it)->getActivator());
79 bindings.insert(bindings.end(), *it);
81 functions.insert(std::pair<
int,std::vector<Input*>>(
function,bindings));
84 void ControlsManager::removeBindingsWithActivator(std::vector<Input *> *bindings,
85 ControlStatus::Activator toRemove) {
86 for (
auto it = bindings->begin(); it != bindings->end();) {
87 if ((*it)->getActivator() == toRemove) {
89 it = bindings->erase(it);
97 std::vector<Input*> buttons;
98 functionCollection::iterator elem = functions.find(
function);
99 if(elem == functions.end())
101 buttons = elem->second;
103 for(
auto it = buttons.begin(); it != buttons.end() ; it++)
104 status.merge((*it)->getStatus());
The class that contains information about a function at the state of creation.
ControlStatus getStatus(int function)
void addBinding(int function, Input *button)
Adds a button to specified function.
static ControlsManager * getInstance()
Gets the singleton instance of the controls manager.
void addBindings(int function, std::initializer_list< Input * > buttons)