58 lines
1.2 KiB
C++
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
|