diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-08-22 14:46:52 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-08-22 14:46:52 +0300 |
commit | 836e43db60ff1f3c9d160d0d58ba5a631c4293fc (patch) | |
tree | 89096c3ffd4128694542ebdbfabe94b6a618e16d /src/game.h | |
parent | 6596e585fe844ce87a957bb7deaf2bf92d828592 (diff) | |
parent | 7e610aece52ad547d4ae263aff5297342d5a4bff (diff) | |
download | hax-minetest-server-836e43db60ff1f3c9d160d0d58ba5a631c4293fc.tar.gz hax-minetest-server-836e43db60ff1f3c9d160d0d58ba5a631c4293fc.zip |
Merge remote-tracking branch 'oblomov/new_input'
Diffstat (limited to '')
-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; |