From af4212987f30a8d46643a97a18215856f34346ba Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Sat, 18 Nov 2023 14:34:16 -0800 Subject: [PATCH] Menu-FN: Make Chat Rooms and Controls accessible from other menus, keeping track of where we originated from --- src/menu-fn/defs.h | 18 +++++++++++------- src/menu-fn/m_chatrooms.qc | 14 ++++++++++++-- src/menu-fn/m_configuration.qc | 3 +++ src/menu-fn/m_controls.qc | 31 +++++++++++++++++++++++++++---- src/menu-fn/m_internetgames.qc | 20 +++++++++++++++++++- src/menu-fn/m_multiplayer.qc | 32 +++++++++++++++++++++++++++----- 6 files changed, 99 insertions(+), 19 deletions(-) diff --git a/src/menu-fn/defs.h b/src/menu-fn/defs.h index b5a0963b..67382755 100644 --- a/src/menu-fn/defs.h +++ b/src/menu-fn/defs.h @@ -95,9 +95,9 @@ enum typedef enum { - RESOURCE_UNCHECKED, - RESOURCE_AVAILABLE, - RESOURCE_MISSING + RESOURCE_UNCHECKED, /**<< State of the resource is unknown. Check it with Resource_Check() first. */ + RESOURCE_AVAILABLE, /**<< The resource exists. */ + RESOURCE_MISSING /**<< The resource is unavailable. */ } resource_t; resource_t @@ -112,12 +112,10 @@ Resource_Check(string fname) bool Resource_Available(resource_t res) { - if (res == RESOURCE_MISSING) - return false; - else if (res == RESOURCE_AVAILABLE) + if (res == RESOURCE_AVAILABLE) return true; - return RESOURCE_UNCHECKED; + return false; } void m_hide(void); @@ -126,4 +124,10 @@ void warning(string msg) { print(sprintf("^1WARNING: ^7%s\n", msg)); +} + +bool +mp_connected(void) +{ + return (!autocvar__menu_singleplayer && clientstate() == 2 && !g_background) ? true : false; } \ No newline at end of file diff --git a/src/menu-fn/m_chatrooms.qc b/src/menu-fn/m_chatrooms.qc index 733c4547..ec5e5bf0 100644 --- a/src/menu-fn/m_chatrooms.qc +++ b/src/menu-fn/m_chatrooms.qc @@ -14,6 +14,8 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +var bool g_menuChatInternet = false; + CFrame cr_frLog; CFrame cr_frUsers; CTextBox cr_tbInput; @@ -388,11 +390,19 @@ void cr_btndone_start(void) { static void cr_btndone_end(void) { - g_menupage = PAGE_MULTIPLAYER; + if (g_menuChatInternet == false) + g_menupage = PAGE_MULTIPLAYER; + else + g_menupage = PAGE_INTERNETGAMES; } //cr_closeconnection(); localsound("../media/launch_dnmenu1.wav"); - header.SetStartEndPos(45,45,50,239); + + if (g_menuChatInternet == false) + header.SetStartEndPos(45,45,50,239); + else + header.SetStartEndPos(45,45,30,364); + header.SetStartEndSize(460,80,156,26); header.m_lerp = 0.0f; header.m_visible = TRUE; diff --git a/src/menu-fn/m_configuration.qc b/src/menu-fn/m_configuration.qc index 4003a868..205cf0b5 100644 --- a/src/menu-fn/m_configuration.qc +++ b/src/menu-fn/m_configuration.qc @@ -14,6 +14,8 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +var bool g_menuControlsMultiplayer = false; + CWidget fn_configuration; CMainButton cf_btnControls; CMainButton cf_btnAudio; @@ -29,6 +31,7 @@ btn_controls_start(void) static void btn_controls_end(void) { g_menupage = PAGE_CONTROLS; } + g_menuControlsMultiplayer = false; localsound("../media/launch_upmenu1.wav"); header.SetStartEndPos(50,140,45,45); header.SetStartEndSize(156,26,460,80); diff --git a/src/menu-fn/m_controls.qc b/src/menu-fn/m_controls.qc index 3725800b..1f646d45 100644 --- a/src/menu-fn/m_controls.qc +++ b/src/menu-fn/m_controls.qc @@ -51,11 +51,22 @@ void ctrl_btnok_start(void) { static void ctrl_btnok_end(void) { - g_menupage = PAGE_CONFIGURATION; + if (g_menuControlsMultiplayer == false) + g_menupage = PAGE_CONFIGURATION; + else + g_menupage = PAGE_MULTIPLAYER; } localsound("../media/launch_dnmenu1.wav"); - header.SetStartEndPos(45, 45, 50, 140); + + if (g_menuControlsMultiplayer == false) + header.SetStartEndPos(45, 45, 50, 140); + else + if (mp_connected()) + header.SetStartEndPos(45, 45, 50, 364); + else + header.SetStartEndPos(45, 45, 50, 332); + header.SetStartEndSize(460, 80, 156, 26); header.m_lerp = 0.0f; header.m_visible = TRUE; @@ -67,12 +78,24 @@ void ctrl_btncancel_start(void) { static void ctrl_btnok_end(void) { - g_menupage = PAGE_CONFIGURATION; + if (g_menuControlsMultiplayer == false) + g_menupage = PAGE_CONFIGURATION; + else + g_menupage = PAGE_MULTIPLAYER; } localsound("../media/launch_dnmenu1.wav"); - header.SetStartEndPos(45, 45, 50, 172); + + if (g_menuControlsMultiplayer == false) + header.SetStartEndPos(45, 45, 50, 140); + else + if (mp_connected()) + header.SetStartEndPos(45, 45, 50, 364); + else + header.SetStartEndPos(45, 45, 50, 332); + header.SetStartEndSize(460, 80, 156, 26); + header.m_lerp = 0.0f; header.m_visible = TRUE; header.SetHeader(HEAD_CONTROLS); diff --git a/src/menu-fn/m_internetgames.qc b/src/menu-fn/m_internetgames.qc index 1075a236..80cf357c 100644 --- a/src/menu-fn/m_internetgames.qc +++ b/src/menu-fn/m_internetgames.qc @@ -105,6 +105,24 @@ inet_btndone_start(void) header.SetExecute(inet_btndone_end); } + + +void +inet_btnchatrooms_start(void) +{ + static void mp_btnchatrooms_end(void) { + g_menupage = PAGE_CHATROOMS; + } + g_menuChatInternet = true; + localsound("../media/launch_upmenu1.wav"); + header.SetStartEndPos(30,364,45,45); + header.SetStartEndSize(156,26,460,80); + header.m_lerp = 0.0f; + header.m_visible = TRUE; + header.SetHeader(HEAD_ROOMS); + header.SetExecute(mp_btnchatrooms_end); +} + void inet_btnrefresh(void) { @@ -250,7 +268,7 @@ menu_internetgames_init(void) inet_btnChatRooms = spawn(CMainButton); inet_btnChatRooms.SetImage(BTN_CHATROOMS); - //inet_btnChatRooms.SetExecute(btn_console); + inet_btnChatRooms.SetExecute(inet_btnchatrooms_start); inet_btnChatRooms.SetPos(30,364); Widget_Add(fn_inet, inet_btnChatRooms); diff --git a/src/menu-fn/m_multiplayer.qc b/src/menu-fn/m_multiplayer.qc index 88dee8e9..13bb8a03 100644 --- a/src/menu-fn/m_multiplayer.qc +++ b/src/menu-fn/m_multiplayer.qc @@ -139,6 +139,7 @@ mp_btnchatrooms_start(void) static void mp_btnchatrooms_end(void) { g_menupage = PAGE_CHATROOMS; } + g_menuChatInternet = false; localsound("../media/launch_upmenu1.wav"); header.SetStartEndPos(50,239,45,45); header.SetStartEndSize(156,26,460,80); @@ -163,6 +164,28 @@ mp_btncustomize_start(void) header.SetExecute(mp_btncustomize_end); } + +void +mp_btncontrols_start(void) +{ + static void btn_controls_end(void) { + g_menupage = PAGE_CONTROLS; + } + g_menuControlsMultiplayer = true; + localsound("../media/launch_upmenu1.wav"); + + if (mp_connected()) + header.SetStartEndPos(50,364,45,45); + else + header.SetStartEndPos(50,332,45,45); + + header.SetStartEndSize(156,26,460,80); + header.m_lerp = 0.0f; + header.m_visible = TRUE; + header.SetHeader(HEAD_CONTROLS); + header.SetExecute(btn_controls_end); +} + void mp_btnresume(void) { @@ -228,7 +251,7 @@ menu_multiplayer_init(void) mp_btnControls = spawn(CMainButton); mp_btnControls.SetImage(BTN_CONTROLS); - //mp_btnControls.SetExecute(btn_console); + mp_btnControls.SetExecute(mp_btncontrols_start); mp_btnControls.SetPos(50,332); Widget_Add(fn_multiplayer, mp_btnControls); @@ -238,7 +261,6 @@ menu_multiplayer_init(void) mp_btnDone.SetPos(50,364); Widget_Add(fn_multiplayer, mp_btnDone); - /* connected menu */ mp_btn2Resume = spawn(CMainButton); mp_btn2Resume.SetImage(BTN_RESUMEGAME); @@ -284,7 +306,7 @@ menu_multiplayer_init(void) mp_btn2Controls = spawn(CMainButton); mp_btn2Controls.SetImage(BTN_CONTROLS); - //mp_btn2Controls.SetExecute(btn_console); + mp_btn2Controls.SetExecute(mp_btncontrols_start); mp_btn2Controls.SetPos(50,364); Widget_Add(fn_multiplayer2, mp_btn2Controls); @@ -302,7 +324,7 @@ menu_multiplayer_draw(void) { Header_Draw(HEAD_MULTI); - if (!autocvar__menu_singleplayer && clientstate() == 2 && !g_background) { + if (mp_connected()) { Widget_Draw(fn_multiplayer2); WLabel_Static(215, 148, m_reslbl[IDS_MULTI_RESUMEHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help, @@ -367,7 +389,7 @@ menu_multiplayer_input(float evtype, float scanx, float chary, float devid) if (g_connectstatus) return; - if (!autocvar__menu_singleplayer && clientstate() == 2 && !g_background) + if (mp_connected()) Widget_Input(fn_multiplayer2, evtype, scanx, chary, devid); else Widget_Input(fn_multiplayer, evtype, scanx, chary, devid);