#pragma once namespace Components { class UIScript : public Component { public: UIScript(); ~UIScript(); #if defined(DEBUG) || defined(FORCE_UNIT_TESTS) const char* getName() override { return "UIScript"; }; #endif class Token { public: Token() : token(nullptr) {}; Token(const char** args) : token(nullptr) { this->parse(args); }; Token(const Token &obj) { this->token = obj.token; }; template T get(); bool isValid(); private: char* token; void parse(const char** args); }; typedef void(Callback)(Token token); typedef void(CallbackRaw)(); static void Add(std::string name, Utils::Slot callback); static void AddOwnerDraw(int ownerdraw, Utils::Slot callback); private: static void OwnerDrawHandleKeyStub(int ownerDraw, int flags, float *special, int key); static bool RunMenuScript(const char* name, const char** args); static void RunMenuScriptStub(); static std::unordered_map> UIScripts; static std::unordered_map> UIOwnerDraws; }; }