/****************************************************************************** * 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 #include #include 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 mKeyboard; // Cross references std::map mKeysByName; std::map mKeysByAscii; private: // Helper methods void InitKeysByName(); void InitKeysByAscii(); }; } #endif // KEYBOARD_H_