1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00
luanti/src/client/keycode.h

66 lines
1.3 KiB
C
Raw Normal View History

// Luanti
// SPDX-License-Identifier: LGPL-2.1-or-later
// Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
#pragma once
#include "exceptions.h"
2012-06-17 04:00:31 +03:00
#include "irrlichttypes.h"
2024-04-20 18:52:52 +02:00
#include <Keycodes.h>
2012-06-17 04:00:31 +03:00
#include <IEventReceiver.h>
#include <string>
class UnknownKeycode : public BaseException
{
public:
UnknownKeycode(const char *s) :
BaseException(s) {};
};
/* A key press, consisting of either an Irrlicht keycode
or an actual char */
class KeyPress
{
public:
KeyPress() = default;
KeyPress(const char *name);
KeyPress(const irr::SEvent::SKeyInput &in, bool prefer_character = false);
bool operator==(const KeyPress &o) const
{
return (Char > 0 && Char == o.Char) || (valid_kcode(Key) && Key == o.Key);
}
const char *sym() const;
const char *name() const;
protected:
static bool valid_kcode(irr::EKEY_CODE k)
{
return k > 0 && k < irr::KEY_KEY_CODES_COUNT;
}
irr::EKEY_CODE Key = irr::KEY_KEY_CODES_COUNT;
wchar_t Char = L'\0';
std::string m_name = "";
};
2024-04-20 18:52:52 +02:00
// Global defines for convenience
extern const KeyPress EscapeKey;
2024-04-20 18:52:52 +02:00
extern const KeyPress LMBKey;
extern const KeyPress MMBKey; // Middle Mouse Button
extern const KeyPress RMBKey;
// Key configuration getter
2024-04-20 18:52:52 +02:00
const KeyPress &getKeySetting(const char *settingname);
// Clear fast lookup cache
void clearKeyCache();
irr::EKEY_CODE keyname_to_keycode(const char *name);