#pragma once namespace Components { class UIFeeder : public Component { public: typedef Utils::Slot GetItemCount_t; typedef Utils::Slot GetItemText_t; typedef Utils::Slot Select_t; struct Callbacks { GetItemCount_t getItemCount; GetItemText_t getItemText; Select_t select; }; UIFeeder(); ~UIFeeder(); #if defined(DEBUG) || defined(FORCE_UNIT_TESTS) const char* getName() override { return "UIFeeder"; }; #endif static void Add(float feeder, GetItemCount_t itemCountCb, GetItemText_t itemTextCb, Select_t selectCb); private: struct Container { float feeder; int index; int column; }; static Container Current; static void GetItemCountStub(); static unsigned int GetItemCount(); static void GetItemTextStub(); static const char* GetItemText(); static void SetItemSelectionStub(); static bool SetItemSelection(); static bool CheckFeeder(); static int CheckSelection(int feeder); static void CheckSelectionStub(); static void MouseEnterStub(); static void MouseSelectStub(); static void HandleKeyStub(); static void PlaySoundStub(); static void Select(float feeder, unsigned int index); static std::unordered_map Feeders; static unsigned int GetMapCount(); static const char* GetMapText(unsigned int index, int column); static void SelectMap(unsigned int index); static void ApplyMap(UIScript::Token token); static void ApplyInitialMap(UIScript::Token token); }; }