MENU: macro hax to get NextButton/PreviousButton

This commit is contained in:
erysdren 2024-11-16 11:41:49 -06:00
parent 81f7179ebf
commit 8c86b48547
3 changed files with 125 additions and 9 deletions

View file

@ -87,6 +87,19 @@ void() Menu_Bindings;
string(string prev_id) Menu_Main_GetNextButton;
string(string next_id) Menu_Main_GetPreviousButton;
string(string next_id) Menu_Coop_Browse_GetNextButton;
string(string next_id) Menu_Coop_Direct_GetNextButton;
string(string next_id) Menu_Coop_Join_GetNextButton;
string(string next_id) Menu_Coop_Create_GetNextButton;
string(string next_id) Menu_Coop_GetNextButton;
string(string next_id) Menu_Coop_Browse_GetPreviousButton;
string(string next_id) Menu_Coop_Direct_GetPreviousButton;
string(string next_id) Menu_Coop_Join_GetPreviousButton;
string(string next_id) Menu_Coop_Create_GetPreviousButton;
string(string next_id) Menu_Coop_GetPreviousButton;
string(string prev_id) Menu_Maps_GetNextButton;
string(string next_id) Menu_Maps_GetPreviousButton;

View file

@ -217,3 +217,83 @@ void() Menu_Coop =
sui_pop_frame();
};
string menu_coop_browse_buttons[] = {
"cbm_serverlist", "cbm_refresh", "cbm_back"
};
string menu_coop_direct_buttons[] = {
"cdm_serverip", "cdm_serverpassword", "cdm_connect", "cdm_back"
};
string menu_coop_join_buttons[] = {
"cjm_browse", "cjm_direct", "cjm_back"
};
string menu_coop_create_buttons[] = {
"ccm_servername", "ccm_port", "ccm_password", "ccm_choosemap", "ccm_back"
};
string menu_coop_buttons[] = {
"cm_playername", "cm_join", "cm_create", "cm_back"
};
// can you tell i'm a C user at heart? -- erysdren
#define NEXTBUTTON_FUNC(fn, arr) \
string(string prev_id) fn ## _GetNextButton = \
{ \
if (prev_id == "") \
return arr[0]; \
\
string ret = arr[0]; \
\
for(float i = 0; i < arr.length; i++) { \
if (arr[i] == prev_id) { \
if (i + 1 >= arr.length) \
break; \
\
ret = arr[i + 1]; \
break; \
} \
} \
\
return ret; \
}; \
NEXTBUTTON_FUNC(Menu_Coop_Browse, menu_coop_browse_buttons)
NEXTBUTTON_FUNC(Menu_Coop_Direct, menu_coop_direct_buttons)
NEXTBUTTON_FUNC(Menu_Coop_Join, menu_coop_join_buttons)
NEXTBUTTON_FUNC(Menu_Coop_Create, menu_coop_create_buttons)
NEXTBUTTON_FUNC(Menu_Coop, menu_coop_buttons)
#undef NEXTBUTTON_FUNC
#define PREVBUTTON_FUNC(fn, arr) \
string(string next_id) fn ## _GetPreviousButton = \
{ \
if (next_id == "") \
return arr[arr.length - 1]; \
\
string ret = arr[arr.length - 1]; \
\
for(float i = arr.length - 1; i > 0; i--) { \
if (arr[i] == next_id) { \
if (i - 1 < 0) \
break; \
\
ret = arr[i - 1]; \
break; \
} \
} \
\
return ret; \
}; \
PREVBUTTON_FUNC(Menu_Coop_Browse, menu_coop_browse_buttons)
PREVBUTTON_FUNC(Menu_Coop_Direct, menu_coop_direct_buttons)
PREVBUTTON_FUNC(Menu_Coop_Join, menu_coop_join_buttons)
PREVBUTTON_FUNC(Menu_Coop_Create, menu_coop_create_buttons)
PREVBUTTON_FUNC(Menu_Coop, menu_coop_buttons)
#undef PREVBUTTON_FUNC

View file

@ -400,17 +400,23 @@ void() _sui_menukey_downarrow =
case MENU_MAIN:
_hover_actions[0] = Menu_Main_GetNextButton(current_hovered_option);
break;
// TODO: do this
#if 0
case MENU_COOP:
case MENU_COOPJOIN:
case MENU_COOPBROWSE:
case MENU_COOPDIRECT:
case MENU_COOPCREATE:
case MENU_COOPSTOCK:
_hover_actions[0] = Menu_Maps_GetNextButton(current_hovered_option);
_hover_actions[0] = Menu_Coop_GetNextButton(current_hovered_option);
break;
#endif
case MENU_COOPJOIN:
_hover_actions[0] = Menu_Coop_Join_GetNextButton(current_hovered_option);
break;
case MENU_COOPBROWSE:
_hover_actions[0] = Menu_Coop_Browse_GetNextButton(current_hovered_option);
break;
case MENU_COOPDIRECT:
_hover_actions[0] = Menu_Coop_Direct_GetNextButton(current_hovered_option);
break;
case MENU_COOPCREATE:
_hover_actions[0] = Menu_Coop_Create_GetNextButton(current_hovered_option);
break;
case MENU_COOPSTOCK:
case MENU_COOPUSER:
case MENU_SOLO:
case MENU_SOLOUSER:
_hover_actions[0] = Menu_Maps_GetNextButton(current_hovered_option);
@ -460,6 +466,23 @@ void() _sui_menukey_uparrow =
case MENU_MAIN:
_hover_actions[0] = Menu_Main_GetPreviousButton(current_hovered_option);
break;
case MENU_COOP:
_hover_actions[0] = Menu_Coop_GetPreviousButton(current_hovered_option);
break;
case MENU_COOPJOIN:
_hover_actions[0] = Menu_Coop_Join_GetPreviousButton(current_hovered_option);
break;
case MENU_COOPBROWSE:
_hover_actions[0] = Menu_Coop_Browse_GetPreviousButton(current_hovered_option);
break;
case MENU_COOPDIRECT:
_hover_actions[0] = Menu_Coop_Direct_GetPreviousButton(current_hovered_option);
break;
case MENU_COOPCREATE:
_hover_actions[0] = Menu_Coop_Create_GetPreviousButton(current_hovered_option);
break;
case MENU_COOPSTOCK:
case MENU_COOPUSER:
case MENU_SOLO:
case MENU_SOLOUSER:
_hover_actions[0] = Menu_Maps_GetPreviousButton(current_hovered_option);