#ifndef GAME_UI_CGUIBINDINGS_HPP #define GAME_UI_CGUIBINDINGS_HPP #include #include #include class CStatus; class XMLNode; enum BINDING_SET { BINDING_SET_0 = 0, BINDING_SET_1, BINDING_SET_2, BINDING_SET_3, }; enum BINDING_MODE { BINDING_MODE_0 = 0, BINDING_MODE_1, BINDING_MODE_2, BINDING_MODE_3, BINDING_MODE_4 }; class KEYBINDING : public TSHashObject { public: uint32_t flags; struct { int32_t index; RCString command; } data[4]; }; class KEYCOMMAND : public TSHashObject { public: int32_t index; int32_t function; int32_t runOnUp; int32_t pressure; int32_t angle; }; class MODIFIEDCLICK : public TSHashObject { public: void SetBinding(BINDING_SET a1, const char* binding); int32_t index; }; class CGUIBindings { public: CGUIBindings() = default; bool Load(const char* commandsFile, MD5_CTX* md5, CStatus* status); void LoadBinding(const char* commandsFile, XMLNode* node, CStatus* status); void LoadModifiedClick(const char* commandsFile, XMLNode* node, CStatus* status); bool Bind(BINDING_SET set, BINDING_MODE mode, const char* keystring, const char* command); const char* GetBindingCommand(KEYBINDING* binding, BINDING_MODE mode) const; int32_t GetBindingIndex(KEYBINDING* binding, BINDING_MODE mode) const; int32_t GetNumCommandKeys(BINDING_SET set, BINDING_MODE mode, const char* command); void AdjustCommandKeyIndices(BINDING_SET set, BINDING_MODE mode, const char* command, int32_t index); int32_t m_numCommands; int32_t m_numHiddenCommands; int32_t m_numModifiedClicks; TSHashTable m_bindings; TSHashTable m_commands; TSHashTable m_modifiedClicks; }; #endif // GAME_UI_CGUIBINDINGS_HPP