controls.json -> controls.toml
This commit is contained in:
+15
-8
@@ -110,6 +110,10 @@ void Events::bind(const std::string& name, inputtype type, int code) {
|
||||
bindings.emplace(name, Binding(type, code));
|
||||
}
|
||||
|
||||
void Events::rebind(const std::string& name, inputtype type, int code) {
|
||||
bindings[name] = Binding(type, code);
|
||||
}
|
||||
|
||||
bool Events::active(const std::string& name) {
|
||||
const auto& found = bindings.find(name);
|
||||
if (found == bindings.end()) {
|
||||
@@ -155,19 +159,22 @@ std::string Events::writeBindings() {
|
||||
dynamic::Map obj;
|
||||
for (auto& entry : Events::bindings) {
|
||||
const auto& binding = entry.second;
|
||||
|
||||
auto& jentry = obj.putMap(entry.first);
|
||||
std::string value;
|
||||
switch (binding.type) {
|
||||
case inputtype::keyboard: jentry.put("type", "keyboard"); break;
|
||||
case inputtype::mouse: jentry.put("type", "mouse"); break;
|
||||
case inputtype::keyboard:
|
||||
value = "key:"+input_util::get_name(static_cast<keycode>(binding.code));
|
||||
break;
|
||||
case inputtype::mouse:
|
||||
value = "mouse:"+input_util::get_name(static_cast<mousecode>(binding.code));
|
||||
break;
|
||||
default: throw std::runtime_error("unsupported control type");
|
||||
}
|
||||
jentry.put("code", binding.code);
|
||||
obj.put(entry.first, value);
|
||||
}
|
||||
return json::stringify(&obj, true, " ");
|
||||
return toml::stringify(obj);
|
||||
}
|
||||
|
||||
void Events::loadBindings(const std::string& filename, const std::string& source) {
|
||||
void Events::loadBindingsOld(const std::string& filename, const std::string& source) {
|
||||
auto obj = json::parse(filename, source);
|
||||
for (auto& entry : Events::bindings) {
|
||||
auto& binding = entry.second;
|
||||
@@ -192,7 +199,7 @@ void Events::loadBindings(const std::string& filename, const std::string& source
|
||||
}
|
||||
}
|
||||
|
||||
void Events::loadBindingsToml(const std::string& filename, const std::string& source) {
|
||||
void Events::loadBindings(const std::string& filename, const std::string& source) {
|
||||
auto map = toml::parse(filename, source);
|
||||
for (auto& entry : map->values) {
|
||||
if (auto value = std::get_if<std::string>(&entry.second)) {
|
||||
|
||||
@@ -41,6 +41,7 @@ public:
|
||||
static void bind(const std::string& name, inputtype type, keycode code);
|
||||
static void bind(const std::string& name, inputtype type, mousecode code);
|
||||
static void bind(const std::string& name, inputtype type, int code);
|
||||
static void rebind(const std::string& name, inputtype type, int code);
|
||||
static bool active(const std::string& name);
|
||||
static bool jactive(const std::string& name);
|
||||
|
||||
@@ -51,7 +52,7 @@ public:
|
||||
|
||||
static std::string writeBindings();
|
||||
static void loadBindings(const std::string& filename, const std::string& source);
|
||||
static void loadBindingsToml(const std::string& filename, const std::string& source);
|
||||
static void loadBindingsOld(const std::string& filename, const std::string& source); // TODO: remove in 0.22
|
||||
};
|
||||
|
||||
#endif // WINDOW_EVENTS_HPP_
|
||||
|
||||
@@ -40,6 +40,25 @@ static std::unordered_map<std::string, int> mousecodes {
|
||||
{"middle", GLFW_MOUSE_BUTTON_3},
|
||||
};
|
||||
|
||||
static std::unordered_map<int, std::string> keynames {};
|
||||
|
||||
std::string input_util::get_name(mousecode code) {
|
||||
switch (code) {
|
||||
case mousecode::BUTTON_1: return "left";
|
||||
case mousecode::BUTTON_2: return "right";
|
||||
case mousecode::BUTTON_3: return "middle";
|
||||
default: return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
std::string input_util::get_name(keycode code) {
|
||||
auto found = keynames.find(static_cast<int>(code));
|
||||
if (found == keynames.end()) {
|
||||
return "unknown";
|
||||
}
|
||||
return found->second;
|
||||
}
|
||||
|
||||
void Binding::reset(inputtype type, int code) {
|
||||
this->type = type;
|
||||
this->code = code;
|
||||
@@ -63,6 +82,9 @@ void input_util::initialize() {
|
||||
for (char i = 'a'; i <= 'z'; i++) {
|
||||
keycodes[std::string({i})] = GLFW_KEY_A-'a'+i;
|
||||
}
|
||||
for (const auto& entry : keycodes) {
|
||||
keynames[entry.second] = entry.first;
|
||||
}
|
||||
}
|
||||
|
||||
keycode input_util::keycode_from(const std::string& name) {
|
||||
|
||||
@@ -122,6 +122,11 @@ namespace input_util {
|
||||
std::string to_string(keycode code);
|
||||
/// @return Mouse button label by keycode
|
||||
std::string to_string(mousecode code);
|
||||
|
||||
/// @return Key name by keycode
|
||||
std::string get_name(keycode code);
|
||||
/// @return Mouse button name by keycode
|
||||
std::string get_name(mousecode code);
|
||||
}
|
||||
|
||||
enum class inputtype {
|
||||
|
||||
Reference in New Issue
Block a user