Engine: Add function for finding key names
This commit is contained in:
@@ -199,7 +199,7 @@ bool Application::onKeyPress(KeyPressEvent& e)
|
|||||||
// Suppress unused warning
|
// Suppress unused warning
|
||||||
(void)e;
|
(void)e;
|
||||||
|
|
||||||
ruc::info("KeyPressEvent {} ({})", Input::getKeyName(e.getKey()), e.getKey());
|
ruc::info("KeyPressEvent {:3} {}", e.getKey(), keyName(e.getKey()));
|
||||||
|
|
||||||
// Stop the main loop on 'Escape' keypress
|
// Stop the main loop on 'Escape' keypress
|
||||||
if (e.getKey() == keyCode("GLFW_KEY_ESCAPE")) {
|
if (e.getKey() == keyCode("GLFW_KEY_ESCAPE")) {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include <string> // std::string
|
#include <algorithm> // std::find_if
|
||||||
|
#include <string_view>
|
||||||
#include <unordered_map> // std::unordered_map
|
#include <unordered_map> // std::unordered_map
|
||||||
|
|
||||||
#include "GLFW/glfw3.h"
|
#include "GLFW/glfw3.h"
|
||||||
@@ -8,7 +9,7 @@
|
|||||||
|
|
||||||
namespace Inferno {
|
namespace Inferno {
|
||||||
|
|
||||||
static std::unordered_map<std::string, int> keys({
|
static std::unordered_map<std::string_view, int> keys({
|
||||||
{ MAP_KEY(GLFW_KEY_UNKNOWN) },
|
{ MAP_KEY(GLFW_KEY_UNKNOWN) },
|
||||||
{ MAP_KEY(GLFW_KEY_SPACE) },
|
{ MAP_KEY(GLFW_KEY_SPACE) },
|
||||||
{ MAP_KEY(GLFW_KEY_APOSTROPHE) },
|
{ MAP_KEY(GLFW_KEY_APOSTROPHE) },
|
||||||
@@ -134,10 +135,20 @@ static std::unordered_map<std::string, int> keys({
|
|||||||
|
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
|
||||||
int keyCode(const char* name)
|
int keyCode(std::string_view name)
|
||||||
{
|
{
|
||||||
VERIFY(keys.find(name) != keys.end(), "keyCode could not find '{}'", name);
|
VERIFY(keys.find(name) != keys.end(), "could not find key code: {}", name);
|
||||||
return keys.at(name);
|
return keys.at(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string_view keyName(int key)
|
||||||
|
{
|
||||||
|
auto it = std::find_if(keys.begin(), keys.end(), [key](const auto& keybind) {
|
||||||
|
return keybind.second == key;
|
||||||
|
});
|
||||||
|
|
||||||
|
VERIFY(it != keys.end(), "could not find key name: {}", key);
|
||||||
|
return it->first.substr(9);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Inferno
|
} // namespace Inferno
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <string_view>
|
||||||
|
|
||||||
#define MAP_KEY(key) #key, key
|
#define MAP_KEY(key) #key, key
|
||||||
|
|
||||||
namespace Inferno {
|
namespace Inferno {
|
||||||
|
|
||||||
int keyCode(const char* name);
|
int keyCode(std::string_view name);
|
||||||
|
std::string_view keyName(int);
|
||||||
|
|
||||||
}
|
} // namespace Inferno
|
||||||
|
|||||||
Reference in New Issue
Block a user