rename keycode, mousecode enumerations
This commit is contained in:
@@ -168,10 +168,10 @@ public:
|
||||
uint currentFrame = 0;
|
||||
uint frames[KEYS_BUFFER_SIZE] {};
|
||||
std::vector<uint> codepoints;
|
||||
std::vector<keycode> pressedKeys;
|
||||
std::vector<Keycode> pressedKeys;
|
||||
Bindings bindings;
|
||||
bool keys[KEYS_BUFFER_SIZE] {};
|
||||
std::unordered_map<keycode, util::HandlersList<>> keyCallbacks;
|
||||
std::unordered_map<Keycode, util::HandlersList<>> keyCallbacks;
|
||||
|
||||
GLFWInput(GLFWwindow* window)
|
||||
: window(window) {
|
||||
@@ -196,11 +196,11 @@ public:
|
||||
|
||||
bool newstate = false;
|
||||
switch (binding.type) {
|
||||
case inputtype::keyboard:
|
||||
newstate = pressed(static_cast<keycode>(binding.code));
|
||||
case InputType::KEYBOARD:
|
||||
newstate = pressed(static_cast<Keycode>(binding.code));
|
||||
break;
|
||||
case inputtype::mouse:
|
||||
newstate = clicked(static_cast<mousecode>(binding.code));
|
||||
case InputType::MOUSE:
|
||||
newstate = clicked(static_cast<Mousecode>(binding.code));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -224,13 +224,13 @@ public:
|
||||
keys[key] = pressed;
|
||||
frames[key] = currentFrame;
|
||||
if (pressed && !prevPressed) {
|
||||
const auto& callbacks = keyCallbacks.find(static_cast<keycode>(key));
|
||||
const auto& callbacks = keyCallbacks.find(static_cast<Keycode>(key));
|
||||
if (callbacks != keyCallbacks.end()) {
|
||||
callbacks->second.notify();
|
||||
}
|
||||
}
|
||||
if (pressed) {
|
||||
pressedKeys.push_back(static_cast<keycode>(key));
|
||||
pressedKeys.push_back(static_cast<Keycode>(key));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,24 +251,24 @@ public:
|
||||
return scroll;
|
||||
}
|
||||
|
||||
bool pressed(keycode key) const override {
|
||||
bool pressed(Keycode key) const override {
|
||||
int keycode = static_cast<int>(key);
|
||||
if (keycode < 0 || keycode >= KEYS_BUFFER_SIZE) {
|
||||
return false;
|
||||
}
|
||||
return keys[keycode];
|
||||
}
|
||||
bool jpressed(keycode keycode) const override {
|
||||
bool jpressed(Keycode keycode) const override {
|
||||
return pressed(keycode) &&
|
||||
frames[static_cast<int>(keycode)] == currentFrame;
|
||||
}
|
||||
|
||||
bool clicked(mousecode code) const override {
|
||||
bool clicked(Mousecode code) const override {
|
||||
return pressed(
|
||||
static_cast<keycode>(MOUSE_KEYS_OFFSET + static_cast<int>(code))
|
||||
static_cast<Keycode>(MOUSE_KEYS_OFFSET + static_cast<int>(code))
|
||||
);
|
||||
}
|
||||
bool jclicked(mousecode code) const override {
|
||||
bool jclicked(Mousecode code) const override {
|
||||
return clicked(code) &&
|
||||
frames[static_cast<int>(code) + MOUSE_KEYS_OFFSET] ==
|
||||
currentFrame;
|
||||
@@ -311,11 +311,11 @@ public:
|
||||
return bindings;
|
||||
}
|
||||
|
||||
observer_handler addKeyCallback(keycode key, KeyCallback callback) override {
|
||||
ObserverHandler addKeyCallback(Keycode key, KeyCallback callback) override {
|
||||
return keyCallbacks[key].add(std::move(callback));
|
||||
}
|
||||
|
||||
const std::vector<keycode>& getPressedKeys() const override {
|
||||
const std::vector<Keycode>& getPressedKeys() const override {
|
||||
return pressedKeys;
|
||||
}
|
||||
|
||||
|
||||
+31
-31
@@ -56,7 +56,7 @@ static std::unordered_map<std::string, int> mousecodes {
|
||||
static std::unordered_map<int, std::string> keynames {};
|
||||
static std::unordered_map<int, std::string> buttonsnames{};
|
||||
|
||||
std::string input_util::get_name(mousecode code) {
|
||||
std::string input_util::get_name(Mousecode code) {
|
||||
auto found = buttonsnames.find(static_cast<int>(code));
|
||||
if (found == buttonsnames.end()) {
|
||||
return "unknown";
|
||||
@@ -64,7 +64,7 @@ std::string input_util::get_name(mousecode code) {
|
||||
return found->second;
|
||||
}
|
||||
|
||||
std::string input_util::get_name(keycode code) {
|
||||
std::string input_util::get_name(Keycode code) {
|
||||
auto found = keynames.find(static_cast<int>(code));
|
||||
if (found == keynames.end()) {
|
||||
return "unknown";
|
||||
@@ -72,17 +72,17 @@ std::string input_util::get_name(keycode code) {
|
||||
return found->second;
|
||||
}
|
||||
|
||||
void Binding::reset(inputtype type, int code) {
|
||||
void Binding::reset(InputType type, int code) {
|
||||
this->type = type;
|
||||
this->code = code;
|
||||
}
|
||||
|
||||
void Binding::reset(keycode code) {
|
||||
reset(inputtype::keyboard, static_cast<int>(code));
|
||||
void Binding::reset(Keycode code) {
|
||||
reset(InputType::KEYBOARD, static_cast<int>(code));
|
||||
}
|
||||
|
||||
void Binding::reset(mousecode code) {
|
||||
reset(inputtype::mouse, static_cast<int>(code));
|
||||
void Binding::reset(Mousecode code) {
|
||||
reset(InputType::MOUSE, static_cast<int>(code));
|
||||
}
|
||||
|
||||
void input_util::initialize() {
|
||||
@@ -103,23 +103,23 @@ void input_util::initialize() {
|
||||
}
|
||||
}
|
||||
|
||||
keycode input_util::keycode_from(const std::string& name) {
|
||||
Keycode input_util::keycode_from(const std::string& name) {
|
||||
const auto& found = keycodes.find(name);
|
||||
if (found == keycodes.end()) {
|
||||
return keycode::UNKNOWN;
|
||||
return Keycode::UNKNOWN;
|
||||
}
|
||||
return static_cast<keycode>(found->second);
|
||||
return static_cast<Keycode>(found->second);
|
||||
}
|
||||
|
||||
mousecode input_util::mousecode_from(const std::string& name) {
|
||||
Mousecode input_util::mousecode_from(const std::string& name) {
|
||||
const auto& found = mousecodes.find(name);
|
||||
if (found == mousecodes.end()) {
|
||||
return mousecode::UNKNOWN;
|
||||
return Mousecode::UNKNOWN;
|
||||
}
|
||||
return static_cast<mousecode>(found->second);
|
||||
return static_cast<Mousecode>(found->second);
|
||||
}
|
||||
|
||||
std::string input_util::to_string(keycode code) {
|
||||
std::string input_util::to_string(Keycode code) {
|
||||
int icode_repr = static_cast<int>(code);
|
||||
const char* name =
|
||||
glfwGetKeyName(icode_repr, glfwGetKeyScancode(icode_repr));
|
||||
@@ -212,21 +212,21 @@ std::string input_util::to_string(keycode code) {
|
||||
return std::string(name);
|
||||
}
|
||||
|
||||
std::string input_util::to_string(mousecode code) {
|
||||
std::string input_util::to_string(Mousecode code) {
|
||||
switch (code) {
|
||||
case mousecode::BUTTON_1:
|
||||
case Mousecode::BUTTON_1:
|
||||
return "LMB";
|
||||
case mousecode::BUTTON_2:
|
||||
case Mousecode::BUTTON_2:
|
||||
return "RMB";
|
||||
case mousecode::BUTTON_3:
|
||||
case Mousecode::BUTTON_3:
|
||||
return "MMB";
|
||||
case mousecode::BUTTON_4:
|
||||
case mousecode::BUTTON_5:
|
||||
case mousecode::BUTTON_6:
|
||||
case mousecode::BUTTON_7:
|
||||
case mousecode::BUTTON_8:
|
||||
case Mousecode::BUTTON_4:
|
||||
case Mousecode::BUTTON_5:
|
||||
case Mousecode::BUTTON_6:
|
||||
case Mousecode::BUTTON_7:
|
||||
case Mousecode::BUTTON_8:
|
||||
return "XButton " + std::to_string(static_cast<int>(code) -
|
||||
static_cast<int>(mousecode::BUTTON_3));
|
||||
static_cast<int>(Mousecode::BUTTON_3));
|
||||
default:
|
||||
return "unknown button";
|
||||
}
|
||||
@@ -251,13 +251,13 @@ void Bindings::read(const dv::value& map, BindType bindType) {
|
||||
for (auto& [name, value] : section.asObject()) {
|
||||
auto key = sectionName + "." + name;
|
||||
auto [prefix, codename] = util::split_at(value.asString(), ':');
|
||||
inputtype type;
|
||||
InputType type;
|
||||
int code;
|
||||
if (prefix == "key") {
|
||||
type = inputtype::keyboard;
|
||||
type = InputType::KEYBOARD;
|
||||
code = static_cast<int>(input_util::keycode_from(codename));
|
||||
} else if (prefix == "mouse") {
|
||||
type = inputtype::mouse;
|
||||
type = InputType::MOUSE;
|
||||
code = static_cast<int>(input_util::mousecode_from(codename));
|
||||
} else {
|
||||
logger.error()
|
||||
@@ -282,15 +282,15 @@ std::string Bindings::write() const {
|
||||
const auto& binding = entry.second;
|
||||
std::string value;
|
||||
switch (binding.type) {
|
||||
case inputtype::keyboard:
|
||||
case InputType::KEYBOARD:
|
||||
value =
|
||||
"key:" +
|
||||
input_util::get_name(static_cast<keycode>(binding.code));
|
||||
input_util::get_name(static_cast<Keycode>(binding.code));
|
||||
break;
|
||||
case inputtype::mouse:
|
||||
case InputType::MOUSE:
|
||||
value =
|
||||
"mouse:" +
|
||||
input_util::get_name(static_cast<mousecode>(binding.code));
|
||||
input_util::get_name(static_cast<Mousecode>(binding.code));
|
||||
break;
|
||||
default:
|
||||
throw std::runtime_error("unsupported control type");
|
||||
|
||||
+38
-32
@@ -15,7 +15,7 @@ enum class BindType {
|
||||
};
|
||||
|
||||
/// @brief Represents glfw3 keycode values.
|
||||
enum class keycode : int {
|
||||
enum class Keycode : int {
|
||||
SPACE = 32,
|
||||
APOSTROPHE = 39,
|
||||
COMMA = 44,
|
||||
@@ -108,7 +108,7 @@ enum class keycode : int {
|
||||
|
||||
/// @brief Represents glfw3 mouse button IDs.
|
||||
/// @details There is a subset of glfw3 mouse button IDs.
|
||||
enum class mousecode : int {
|
||||
enum class Mousecode : int {
|
||||
BUTTON_1 = 0, // Left mouse button
|
||||
BUTTON_2 = 1, // Right mouse button
|
||||
BUTTON_3 = 2, // Middle mouse button
|
||||
@@ -120,43 +120,49 @@ enum class mousecode : int {
|
||||
UNKNOWN = -1,
|
||||
};
|
||||
|
||||
inline mousecode MOUSECODES_ALL[] {
|
||||
mousecode::BUTTON_1, mousecode::BUTTON_2, mousecode::BUTTON_3, mousecode::BUTTON_4,
|
||||
mousecode::BUTTON_5, mousecode::BUTTON_6, mousecode::BUTTON_7, mousecode::BUTTON_8 };
|
||||
inline Mousecode MOUSECODES_ALL[] {
|
||||
Mousecode::BUTTON_1,
|
||||
Mousecode::BUTTON_2,
|
||||
Mousecode::BUTTON_3,
|
||||
Mousecode::BUTTON_4,
|
||||
Mousecode::BUTTON_5,
|
||||
Mousecode::BUTTON_6,
|
||||
Mousecode::BUTTON_7,
|
||||
Mousecode::BUTTON_8};
|
||||
|
||||
namespace input_util {
|
||||
void initialize();
|
||||
|
||||
keycode keycode_from(const std::string& name);
|
||||
mousecode mousecode_from(const std::string& name);
|
||||
Keycode keycode_from(const std::string& name);
|
||||
Mousecode mousecode_from(const std::string& name);
|
||||
|
||||
/// @return Key label by keycode
|
||||
std::string to_string(keycode code);
|
||||
std::string to_string(Keycode code);
|
||||
/// @return Mouse button label by keycode
|
||||
std::string to_string(mousecode code);
|
||||
std::string to_string(Mousecode code);
|
||||
|
||||
/// @return Key name by keycode
|
||||
std::string get_name(keycode code);
|
||||
std::string get_name(Keycode code);
|
||||
/// @return Mouse button name by keycode
|
||||
std::string get_name(mousecode code);
|
||||
std::string get_name(Mousecode code);
|
||||
}
|
||||
|
||||
enum class inputtype {
|
||||
keyboard,
|
||||
mouse,
|
||||
enum class InputType {
|
||||
KEYBOARD,
|
||||
MOUSE,
|
||||
};
|
||||
|
||||
struct Binding {
|
||||
util::HandlersList<> onactived;
|
||||
|
||||
inputtype type;
|
||||
InputType type;
|
||||
int code;
|
||||
bool state = false;
|
||||
bool justChange = false;
|
||||
bool enabled = true;
|
||||
|
||||
Binding() = default;
|
||||
Binding(inputtype type, int code) : type(type), code(code) {
|
||||
Binding(InputType type, int code) : type(type), code(code) {
|
||||
}
|
||||
|
||||
bool active() const {
|
||||
@@ -167,17 +173,17 @@ struct Binding {
|
||||
return state && justChange;
|
||||
}
|
||||
|
||||
void reset(inputtype, int);
|
||||
void reset(keycode);
|
||||
void reset(mousecode);
|
||||
void reset(InputType, int);
|
||||
void reset(Keycode);
|
||||
void reset(Mousecode);
|
||||
|
||||
inline std::string text() const {
|
||||
switch (type) {
|
||||
case inputtype::keyboard: {
|
||||
return input_util::to_string(static_cast<keycode>(code));
|
||||
case InputType::KEYBOARD: {
|
||||
return input_util::to_string(static_cast<Keycode>(code));
|
||||
}
|
||||
case inputtype::mouse: {
|
||||
return input_util::to_string(static_cast<mousecode>(code));
|
||||
case InputType::MOUSE: {
|
||||
return input_util::to_string(static_cast<Mousecode>(code));
|
||||
}
|
||||
}
|
||||
return "<unknown input type>";
|
||||
@@ -223,11 +229,11 @@ public:
|
||||
|
||||
const Binding& require(const std::string& name) const;
|
||||
|
||||
void bind(const std::string& name, inputtype type, int code) {
|
||||
void bind(const std::string& name, InputType type, int code) {
|
||||
bindings.try_emplace(name, Binding(type, code));
|
||||
}
|
||||
|
||||
void rebind(const std::string& name, inputtype type, int code) {
|
||||
void rebind(const std::string& name, InputType type, int code) {
|
||||
require(name) = Binding(type, code);
|
||||
}
|
||||
|
||||
@@ -262,11 +268,11 @@ public:
|
||||
|
||||
virtual int getScroll() = 0;
|
||||
|
||||
virtual bool pressed(keycode keycode) const = 0;
|
||||
virtual bool jpressed(keycode keycode) const = 0;
|
||||
virtual bool pressed(Keycode keycode) const = 0;
|
||||
virtual bool jpressed(Keycode keycode) const = 0;
|
||||
|
||||
virtual bool clicked(mousecode mousecode) const = 0;
|
||||
virtual bool jclicked(mousecode mousecode) const = 0;
|
||||
virtual bool clicked(Mousecode mousecode) const = 0;
|
||||
virtual bool jclicked(Mousecode mousecode) const = 0;
|
||||
|
||||
virtual CursorState getCursor() const = 0;
|
||||
|
||||
@@ -277,12 +283,12 @@ public:
|
||||
|
||||
virtual const Bindings& getBindings() const = 0;
|
||||
|
||||
virtual observer_handler addKeyCallback(keycode key, KeyCallback callback) = 0;
|
||||
virtual ObserverHandler addKeyCallback(Keycode key, KeyCallback callback) = 0;
|
||||
|
||||
virtual const std::vector<keycode>& getPressedKeys() const = 0;
|
||||
virtual const std::vector<Keycode>& getPressedKeys() const = 0;
|
||||
virtual const std::vector<uint>& getCodepoints() const = 0;
|
||||
|
||||
observer_handler addCallback(const std::string& name, KeyCallback callback) {
|
||||
ObserverHandler addCallback(const std::string& name, KeyCallback callback) {
|
||||
return getBindings().require(name).onactived.add(callback);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user