From 7e610aece52ad547d4ae263aff5297342d5a4bff Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Sat, 13 Aug 2011 22:44:31 +0200 Subject: Overhaul the input system This allows us to map the keys which are not considered in irrlicht's EKEY_CODE system, such as \, [, /, ] etc. --- src/game.h | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) (limited to 'src/game.h') 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 +#include "keycode.h" + +class KeyList : protected core::list +{ + typedef core::list 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; -- cgit v1.2.3