SparrowInput/keybindings.h

58 lines
1.2 KiB
C++

/**
* @author: Thomas Brandého
*/
#ifndef KEYBINDINGS_H
#define KEYBINDINGS_H
#include <SFML/Window.hpp>
#include <unordered_map>
#define NO_KEY -1
#define NO_ACTION -1
struct Binding{
int action;
int key;
int type;
};
class IKeysMap{
public:
enum {PRESSED, RELEASED, HOLD};
IKeysMap();
std::vector<Binding> getBindings(int action) const;
protected:
std::vector<Binding> keys;
};
class Context {
public:
Context(std::string name, std::vector<int> actions);
std::string getName();
std::vector<int> getActions() const;
private:
std::string name;
std::vector<int> actions;
};
class KeyBindings {
public:
KeyBindings();
KeyBindings(const Context &context, const IKeysMap &keysmap);
int getPressedAction(int key) const;
int getReleasedAction(int key) const;
int getHoldAction(int key) const;
private:
std::unordered_map<int,int> bindings_pressed;
std::unordered_map<int,int> bindings_released;
std::unordered_map<int,int> bindings_hold;
void setPressedAction(int key, int action);
void setReleasedAction(int key, int action);
void setHoldAction(int key, int action);
};
#endif