summaryrefslogtreecommitdiff
path: root/src/keycode.h
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2011-08-13 22:44:31 +0200
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2011-08-22 13:01:11 +0200
commit7e610aece52ad547d4ae263aff5297342d5a4bff (patch)
tree983681e730d3d0ad782d38a1abec2f99cfae8b1a /src/keycode.h
parent16aedc0ef6cfd23f06b162501f26fd7f5c63172c (diff)
downloadminetest-7e610aece52ad547d4ae263aff5297342d5a4bff.tar.gz
minetest-7e610aece52ad547d4ae263aff5297342d5a4bff.tar.bz2
minetest-7e610aece52ad547d4ae263aff5297342d5a4bff.zip
Overhaul the input system
This allows us to map the keys which are not considered in irrlicht's EKEY_CODE system, such as \, [, /, ] etc.
Diffstat (limited to 'src/keycode.h')
-rw-r--r--src/keycode.h37
1 files changed, 34 insertions, 3 deletions
diff --git a/src/keycode.h b/src/keycode.h
index e64cb362c..28fb3f1fb 100644
--- a/src/keycode.h
+++ b/src/keycode.h
@@ -23,11 +23,42 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common_irrlicht.h"
#include <string>
-irr::EKEY_CODE keyname_to_keycode(const char *name);
-const char *keycode_to_keyname(s32 keycode);
+/* A key press, consisting of either an Irrlicht keycode
+ or an actual char */
+
+class KeyPress
+{
+public:
+ KeyPress();
+ KeyPress(const char *name);
+
+ KeyPress(const irr::SEvent::SKeyInput &in);
+
+ bool operator==(const KeyPress &o) const
+ {
+ return valid_kcode(Key) ? Key == o.Key : Char == o.Char;
+ }
+
+ const char *sym() const;
+ const char *name() const;
+
+ std::string debug() const;
+protected:
+ static bool valid_kcode(irr::EKEY_CODE k)
+ {
+ return k > 0 && k < irr::KEY_KEY_CODES_COUNT;
+ }
+
+ irr::EKEY_CODE Key;
+ wchar_t Char;
+ std::string m_name;
+};
+
+extern const KeyPress EscapeKey;
+extern const KeyPress NumberKey[10];
// Key configuration getter
-irr::EKEY_CODE getKeySetting(const char *settingname);
+KeyPress getKeySetting(const char *settingname);
// Clear fast lookup cache
void clearKeyCache();