mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-11 10:38:20 +00:00
f1b002e7fa
Some fixes in the server sided part. One task left, Adding the flags to SortHash(), added Todo in the code.
255 lines
8.2 KiB
C++
255 lines
8.2 KiB
C++
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
|
|
/* If you are missing that file, acquire a complete release at teeworlds.com. */
|
|
#ifndef GAME_CLIENT_COMPONENTS_MENUS_H
|
|
#define GAME_CLIENT_COMPONENTS_MENUS_H
|
|
|
|
#include <base/vmath.h>
|
|
#include <base/tl/sorted_array.h>
|
|
|
|
#include <game/client/component.h>
|
|
#include <game/client/ui.h>
|
|
|
|
|
|
// 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_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_Icon(int ImageId, int SpriteId, const CUIRect *pRect);
|
|
int DoButton_GridHeader(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);
|
|
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_LANGUAGE,
|
|
POPUP_DELETE_DEMO,
|
|
POPUP_SOUNDERROR,
|
|
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,
|
|
PAGE_BROWSER
|
|
};
|
|
|
|
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 settings
|
|
bool m_NeedRestartGraphics;
|
|
bool m_NeedRestartSound;
|
|
bool m_NeedSendinfo;
|
|
|
|
//
|
|
bool m_EscapePressed;
|
|
bool m_EnterPressed;
|
|
bool m_DeletePressed;
|
|
|
|
// for map download popup
|
|
int64 m_DownloadLastCheckTime;
|
|
int m_DownloadLastCheckSize;
|
|
float m_DownloadSpeed;
|
|
|
|
// for call vote
|
|
int m_CallvoteSelectedOption;
|
|
int m_CallvoteSelectedPlayer;
|
|
char m_aCallvoteReason[16];
|
|
|
|
// demo
|
|
struct CDemoItem
|
|
{
|
|
char m_aFilename[128];
|
|
char m_aName[128];
|
|
bool m_IsDir;
|
|
int m_StorageType;
|
|
|
|
bool m_InfosLoaded;
|
|
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<CDemoItem> m_lDemos;
|
|
char m_aCurrentDemoFolder[256];
|
|
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);
|
|
void RenderInGameBrowser(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 RenderLanguageSelection(CUIRect MainView);
|
|
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);
|
|
|
|
//DDRace
|
|
int DoButton_CheckBox_DontCare(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
|
|
};
|
|
#endif
|