You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lunarium_OLD/src/input/keyboard.h

69 lines
1.3 KiB
C++

/******************************************************************************
* File - Keyboard.h
* Author - Joey Pollack
* Date - 2019/11/15 (y/m/d)
* Mod Date - 2019/11/15 (y/m/d)
* Description - Stores data about the keys on the keyboard
*
******************************************************************************/
#ifndef KEYBOARD_H_
#define KEYBOARD_H_
#include <map>
#include <string>
#include <platform/key_codes.h>
namespace lunarium
{
class Keyboard
{
friend class Core;
public: // Data structures
struct Key
{
KeyCode Code;
std::string Name;
std::string ShiftName;
char AsciiValue;
char ShiftAsciiValue;
static Key Unknown();
};
private: // Internal / Engine Only
Keyboard();
Keyboard(const Keyboard&) = delete;
Keyboard& operator=(const Keyboard&) = delete;
void Initialize();
static void Shutdown();
public: // Interface
static Keyboard* GetInstance();
Key GetKey(KeyCode code);
Key GetKey(std::string name);
Key GetKey(char ascii);
private: // The instance
static Keyboard* mpInstance;
private: // Data
std::map<KeyCode, Key> mKeyboard;
// Cross references
std::map<std::string, Key&> mKeysByName;
std::map<char, Key&> mKeysByAscii;
private: // Helper methods
void InitKeysByName();
void InitKeysByAscii();
};
}
#endif // KEYBOARD_H_