diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2011-08-13 22:44:31 +0200 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2011-08-22 13:01:11 +0200 |
commit | 7e610aece52ad547d4ae263aff5297342d5a4bff (patch) | |
tree | 983681e730d3d0ad782d38a1abec2f99cfae8b1a /src/game.h | |
parent | 16aedc0ef6cfd23f06b162501f26fd7f5c63172c (diff) | |
download | hax-minetest-server-7e610aece52ad547d4ae263aff5297342d5a4bff.tar.gz hax-minetest-server-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/game.h')
-rw-r--r-- | src/game.h | 67 |
1 files changed, 65 insertions, 2 deletions
diff --git a/src/game.h b/src/game.h index 95623316a..a9db6c3e1 100644 --- a/src/game.h +++ b/src/game.h @@ -23,6 +23,69 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "common_irrlicht.h" #include <string> +#include "keycode.h" + +class KeyList : protected core::list<KeyPress> +{ + typedef core::list<KeyPress> super; + typedef super::Iterator Iterator; + typedef super::ConstIterator ConstIterator; + + virtual ConstIterator find(const KeyPress &key) const + { + ConstIterator f(begin()); + ConstIterator e(end()); + while (f!=e) { + if (*f == key) + return f; + ++f; + } + return e; + } + + virtual Iterator find(const KeyPress &key) + { + Iterator f(begin()); + Iterator e(end()); + while (f!=e) { + if (*f == key) + return f; + ++f; + } + return e; + } + +public: + void clear() { super::clear(); } + + void set(const KeyPress &key) + { + if (find(key) == end()) + push_back(key); + } + + void unset(const KeyPress &key) + { + Iterator p(find(key)); + if (p != end()) + erase(p); + } + + void toggle(const KeyPress &key) + { + Iterator p(this->find(key)); + if (p != end()) + erase(p); + else + push_back(key); + } + + bool operator[](const KeyPress &key) const + { + return find(key) != end(); + } +}; + class InputHandler { public: @@ -33,8 +96,8 @@ public: { } - virtual bool isKeyDown(EKEY_CODE keyCode) = 0; - virtual bool wasKeyDown(EKEY_CODE keyCode) = 0; + virtual bool isKeyDown(const KeyPress &keyCode) = 0; + virtual bool wasKeyDown(const KeyPress &keyCode) = 0; virtual v2s32 getMousePos() = 0; virtual void setMousePos(s32 x, s32 y) = 0; |