#ifndef GAME_CLIENT_COMPONENTS_MENUS_H #define GAME_CLIENT_COMPONENTS_MENUS_H #include #include #include #include // compnent to fetch keypresses, override all other input class CMenusKeyBinder : public CComponent { public: bool m_TakeKey; bool m_GotKey; IInput::CEvent m_Key; CMenusKeyBinder(); virtual bool OnInput(IInput::CEvent Event); }; class CMenus : public CComponent { static vec4 ms_GuiColor; static vec4 ms_ColorTabbarInactiveOutgame; static vec4 ms_ColorTabbarActiveOutgame; static vec4 ms_ColorTabbarInactiveIngame; static vec4 ms_ColorTabbarActiveIngame; static vec4 ms_ColorTabbarInactive; static vec4 ms_ColorTabbarActive; vec4 ButtonColorMul(const void *pID); int DoButton_DemoPlayer(const void *pID, const char *pText, int Checked, const CUIRect *pRect); int DoButton_DemoPlayer_Sprite(const void *pID, int SpriteId, int Checked, const CUIRect *pRect); int DoButton_Menu(const void *pID, const char *pText, int Checked, const CUIRect *pRect); int DoButton_MenuTab(const void *pID, const char *pText, int Checked, const CUIRect *pRect, int Corners); int DoButton_SettingsTab(const void *pID, const char *pText, int Checked, const CUIRect *pRect); int DoButton_CheckBox_Common(const void *pID, const char *pText, const char *pBoxText, const CUIRect *pRect); int DoButton_CheckBox(const void *pID, const char *pText, int Checked, const CUIRect *pRect); int DoButton_CheckBox_Number(const void *pID, const char *pText, int Checked, const CUIRect *pRect); /*static void ui_draw_menu_button(const void *id, const char *text, int checked, const CUIRect *r, const void *extra); static void ui_draw_keyselect_button(const void *id, const char *text, int checked, const CUIRect *r, const void *extra); static void ui_draw_menu_tab_button(const void *id, const char *text, int checked, const CUIRect *r, const void *extra); static void ui_draw_settings_tab_button(const void *id, const char *text, int checked, const CUIRect *r, const void *extra); */ int DoButton_BrowseIcon(int Checked, const CUIRect *pRect); int DoButton_GridHeader(const void *pID, const char *pText, int Checked, const CUIRect *pRect); int DoButton_ListRow(const void *pID, const char *pText, int Checked, const CUIRect *pRect); //static void ui_draw_browse_icon(int what, const CUIRect *r); //static void ui_draw_grid_header(const void *id, const char *text, int checked, const CUIRect *r, const void *extra); /*static void ui_draw_checkbox_common(const void *id, const char *text, const char *boxtext, const CUIRect *r, const void *extra); static void ui_draw_checkbox(const void *id, const char *text, int checked, const CUIRect *r, const void *extra); static void ui_draw_checkbox_number(const void *id, const char *text, int checked, const CUIRect *r, const void *extra); */ int DoEditBox(void *pID, const CUIRect *pRect, char *pStr, unsigned StrSize, float FontSize, float *Offset, bool Hidden=false, int Corners=CUI::CORNER_ALL); //static int ui_do_edit_box(void *id, const CUIRect *rect, char *str, unsigned str_size, float font_size, bool hidden=false); float DoScrollbarV(const void *pID, const CUIRect *pRect, float Current); float DoScrollbarH(const void *pID, const CUIRect *pRect, float Current); void DoButton_KeySelect(const void *pID, const char *pText, int Checked, const CUIRect *pRect); int DoKeyReader(void *pID, const CUIRect *pRect, int Key); //static int ui_do_key_reader(void *id, const CUIRect *rect, int key); void UiDoGetButtons(int Start, int Stop, CUIRect View); struct CListboxItem { int m_Visible; int m_Selected; CUIRect m_Rect; CUIRect m_HitRect; }; void UiDoListboxStart(void *pId, const CUIRect *pRect, float RowHeight, const char *pTitle, const char *pBottomText, int NumItems, int ItemsPerRow, int SelectedIndex, float ScrollValue); CListboxItem UiDoListboxNextItem(void *pID, bool Selected = false); static CListboxItem UiDoListboxNextRow(); int UiDoListboxEnd(float *pScrollValue, bool *pItemActivated); //static void demolist_listdir_callback(const char *name, int is_dir, void *user); //static void demolist_list_callback(const CUIRect *rect, int index, void *user); enum { POPUP_NONE=0, POPUP_FIRST_LAUNCH, POPUP_CONNECTING, POPUP_MESSAGE, POPUP_DISCONNECTED, POPUP_PURE, POPUP_DELETE_DEMO, POPUP_PASSWORD, POPUP_QUIT, }; enum { PAGE_NEWS=1, PAGE_GAME, PAGE_SERVER_INFO, PAGE_CALLVOTE, PAGE_INTERNET, PAGE_LAN, PAGE_FAVORITES, PAGE_DEMOS, PAGE_SETTINGS, PAGE_SYSTEM, }; int m_GamePage; int m_Popup; int m_ActivePage; bool m_MenuActive; bool m_UseMouseButtons; vec2 m_MousePos; int64 m_LastInput; // char m_aMessageTopic[512]; char m_aMessageBody[512]; char m_aMessageButton[512]; void PopupMessage(const char *pTopic, const char *pBody, const char *pButton); // TODO: this is a bit ugly but.. well.. yeah enum { MAX_INPUTEVENTS = 32 }; static IInput::CEvent m_aInputEvents[MAX_INPUTEVENTS]; static int m_NumInputEvents; // some settings static float ms_ButtonHeight; static float ms_ListheaderHeight; static float ms_FontmodHeight; // for graphic settings bool m_NeedRestart; bool m_NeedSendinfo; // bool m_EscapePressed; bool m_EnterPressed; bool m_DeletePressed; // for call vote int m_CallvoteSelectedOption; int m_CallvoteSelectedPlayer; // demo struct CDemoItem { char m_aFilename[128]; char m_aName[128]; bool m_IsDir; int m_StorageType; bool m_Valid; char m_aMap[64]; bool operator<(const CDemoItem &Other) { return !str_comp(m_aFilename, "..") ? true : !str_comp(Other.m_aFilename, "..") ? false : m_IsDir && !Other.m_IsDir ? true : !m_IsDir && Other.m_IsDir ? false : str_comp_filenames(m_aFilename, Other.m_aFilename) < 0; } }; sorted_array m_lDemos; char m_aCurrentDemoFolder[256]; bool m_DemolistDelEntry; int m_DemolistSelectedIndex; bool m_DemolistSelectedIsDir; int m_DemolistStorageType; void DemolistOnUpdate(bool Reset); void DemolistPopulate(); static void DemolistFetchCallback(const char *pName, int IsDir, int StorageType, void *pUser); // found in menus.cpp int Render(); //void render_background(); //void render_loading(float percent); int RenderMenubar(CUIRect r); void RenderNews(CUIRect MainView); // found in menus_demo.cpp void RenderDemoPlayer(CUIRect MainView); void RenderDemoList(CUIRect MainView); // found in menus_ingame.cpp void RenderGame(CUIRect MainView); void RenderServerInfo(CUIRect MainView); void RenderServerControl(CUIRect MainView); void RenderServerControlKick(CUIRect MainView); void RenderServerControlServer(CUIRect MainView); // found in menus_browser.cpp int m_SelectedIndex; void RenderServerbrowserServerList(CUIRect View); void RenderServerbrowserServerDetail(CUIRect View); void RenderServerbrowserFilters(CUIRect View); void RenderServerbrowser(CUIRect MainView); static void ConchainServerbrowserUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData); // found in menus_settings.cpp void RenderSettingsGeneral(CUIRect MainView); void RenderSettingsPlayer(CUIRect MainView); void RenderSettingsControls(CUIRect MainView); void RenderSettingsGraphics(CUIRect MainView); void RenderSettingsSound(CUIRect MainView); void RenderSettings(CUIRect MainView); void SetActive(bool Active); public: void RenderBackground(); void UseMouseButtons(bool Use) { m_UseMouseButtons = Use; } static CMenusKeyBinder m_Binder; CMenus(); void RenderLoading(float Percent); bool IsActive() const { return m_MenuActive; } virtual void OnInit(); virtual void OnStateChange(int NewState, int OldState); virtual void OnReset(); virtual void OnRender(); virtual bool OnInput(IInput::CEvent Event); virtual bool OnMouseMove(float x, float y); }; #endif