1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-27 17:28:41 +00:00

Overhaul the input system

This allows us to map the keys which are not considered in
irrlicht's EKEY_CODE system, such as \, [, /, ] etc.
This commit is contained in:
Giuseppe Bilotta 2011-08-13 22:44:31 +02:00
parent 16aedc0ef6
commit 7e610aece5
8 changed files with 329 additions and 176 deletions

View file

@ -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;