From 36b9661abdf8f393093ba7d75d320683e492a510 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Mon, 25 Apr 2022 17:00:13 -0700 Subject: [PATCH] Platform: Go over some of the RichPresence APIs I was working on. --- src/menu-fn/defs.h | 1 + src/menu-fn/entry.qc | 12 ++++++++ src/menu-fn/m_creategame.qc | 2 ++ src/menu-fn/m_creategame_inet.qc | 7 ++++- src/menu-fn/m_internetgames.qc | 2 ++ src/menu-fn/m_langames.qc | 2 ++ src/menu-fn/m_main.qc | 4 +++ src/menu-fn/m_multiplayer.qc | 1 + src/menu-fn/m_newgame.qc | 6 ++++ src/platform/richpresence.h | 4 ++- src/platform/richpresence.qc | 47 +++++++++++++++++++++++++++++++- 11 files changed, 85 insertions(+), 3 deletions(-) diff --git a/src/menu-fn/defs.h b/src/menu-fn/defs.h index ab11bd1a..f2924c8e 100644 --- a/src/menu-fn/defs.h +++ b/src/menu-fn/defs.h @@ -49,6 +49,7 @@ int g_active; float g_btnofs; float frametime; var int g_background = FALSE; +var int g_gamestate; /* Font IDs */ font_s font_label; diff --git a/src/menu-fn/entry.qc b/src/menu-fn/entry.qc index 257bd4ea..a995b57d 100644 --- a/src/menu-fn/entry.qc +++ b/src/menu-fn/entry.qc @@ -113,6 +113,7 @@ m_init(void) registercommand("menu_customgame"); registercommand("map_background"); registercommand("menu_musicstart"); + registercommand("richpresence_dump"); Font_Load("fonts/fontcon.font", font_console); Font_Load("fonts/menu_label.font", font_label); @@ -229,6 +230,14 @@ m_draw(vector screensize) /* to prevent TCP timeouts */ menu_chatrooms_keepalive(); + /* rich presence sanity check */ + if (RichPresence_WasSet() == false) { + if (clientstate() == 2) + RichPresence_Set("status", "In-game (Unknown)"); + else + RichPresence_Set("status", "Main Menu"); + } + if (!g_active && !g_background) { /* make sure we're redirecting input when the background's gone */ if (getkeydest() != KEY_GAME) { @@ -351,6 +360,9 @@ m_consolecommand(string cmd) { tokenize(cmd); switch (argv(0)) { + case "richpresence_dump": + RichPresence_DumpInfo(); + break; case "menu_musicstart": Music_MenuStart(); break; diff --git a/src/menu-fn/m_creategame.qc b/src/menu-fn/m_creategame.qc index d5572759..ae921074 100644 --- a/src/menu-fn/m_creategame.qc +++ b/src/menu-fn/m_creategame.qc @@ -46,6 +46,8 @@ create_btnok_start(void) localcmd(sprintf("password %s\n", create_tbPassword.m_text)); localcmd(sprintf("map %s\n", startmap)); g_menupage = PAGE_MULTIPLAYER; + RichPresence_Clear(); + RichPresence_Set("status", sprintf("Multiplayer (LAN): %s", startmap)); } /* Strip .bsp extension before submitting */ startmap = substring(create_lbMaps.GetSelectedItem(), 0, -5); diff --git a/src/menu-fn/m_creategame_inet.qc b/src/menu-fn/m_creategame_inet.qc index 32533683..53e997d5 100644 --- a/src/menu-fn/m_creategame_inet.qc +++ b/src/menu-fn/m_creategame_inet.qc @@ -24,13 +24,18 @@ createinet_btnok_start(void) { static string startmap; static void createinet_btnok_end(void) { - localcmd("stopmusic\nset sv_public 2\n"); + int r = random(1000,9999); + localcmd(sprintf("stopmusic\nset sv_public /%i\n", r)); localcmd(sprintf("hostname %s\n", create_tbHostname.m_text)); localcmd(sprintf("sv_playerslots %s\n", create_tbMaxplayers.m_text)); localcmd(sprintf("password %s\n", create_tbPassword.m_text)); localcmd(sprintf("map %s\n", startmap)); g_menupage = PAGE_MULTIPLAYER; cr_input_enter(sprintf("ACTION is now hosting '%s' on the map %s\n", create_tbHostname.m_text, startmap)); + + RichPresence_Clear(); + RichPresence_Set("status", sprintf("Multiplayer: %s", startmap)); + RichPresence_Set("connect", sprintf("+connect /%i", r)); } /* Strip .bsp extension before submitting */ diff --git a/src/menu-fn/m_internetgames.qc b/src/menu-fn/m_internetgames.qc index 96f43c1a..494f38a1 100644 --- a/src/menu-fn/m_internetgames.qc +++ b/src/menu-fn/m_internetgames.qc @@ -48,6 +48,8 @@ inet_btnjoin(void) if (addr) { localcmd("stopmusic\n"); localcmd(sprintf("connect %s\n", addr)); + RichPresence_Clear(); + RichPresence_Set("connect", strcat("+connect ", addr)); g_menupage = PAGE_MULTIPLAYER; } } diff --git a/src/menu-fn/m_langames.qc b/src/menu-fn/m_langames.qc index 1b14f4d8..f2a86da8 100644 --- a/src/menu-fn/m_langames.qc +++ b/src/menu-fn/m_langames.qc @@ -39,6 +39,8 @@ lan_btnjoin(void) if (addr) { localcmd("stopmusic\n"); localcmd(sprintf("connect %s\n", addr)); + RichPresence_Clear(); + RichPresence_Set("status", sprintf("Multiplayer (LAN): %s", "Unknown")); g_menupage = PAGE_MULTIPLAYER; } } diff --git a/src/menu-fn/m_main.qc b/src/menu-fn/m_main.qc index 8f77fb65..ffb5c7b9 100644 --- a/src/menu-fn/m_main.qc +++ b/src/menu-fn/m_main.qc @@ -79,6 +79,10 @@ btn_training(void) localcmd("stopmusic\n"); localcmd("maxplayers 1\n"); localcmd(games[gameinfo_current].trainingmap); + + /* TODO: Some mods may choose to put movies in this... */ + RichPresence_Clear(); + RichPresence_Set("status", "Singleplayer: Training"); } void diff --git a/src/menu-fn/m_multiplayer.qc b/src/menu-fn/m_multiplayer.qc index 852c17b5..f13db6ce 100644 --- a/src/menu-fn/m_multiplayer.qc +++ b/src/menu-fn/m_multiplayer.qc @@ -168,6 +168,7 @@ void mp_btndisconnect(void) { localcmd("disconnect\n"); + RichPresence_Clear(); } void diff --git a/src/menu-fn/m_newgame.qc b/src/menu-fn/m_newgame.qc index 17d0cd99..d6405d31 100644 --- a/src/menu-fn/m_newgame.qc +++ b/src/menu-fn/m_newgame.qc @@ -29,6 +29,8 @@ ng_btneasy_start(void) localcmd("stopmusic\n"); localcmd("set skill 1; maxplayers 1\n"); localcmd(games[gameinfo_current].startmap); + RichPresence_Clear(); + RichPresence_Set("status", "Singleplayer: Easy"); } localsound("../media/launch_upmenu1.wav"); header.SetStartEndPos(45,45,70,208); @@ -47,6 +49,8 @@ ng_btnnormal_start(void) localcmd("stopmusic\n"); localcmd("set skill 2; maxplayers 1\n"); localcmd(games[gameinfo_current].startmap); + RichPresence_Clear(); + RichPresence_Set("status", "Singleplayer: Normal"); } localsound("../media/launch_upmenu1.wav"); header.SetStartEndPos(45,45,70,208); @@ -65,6 +69,8 @@ ng_btnhard_start(void) localcmd("stopmusic\n"); localcmd("set skill 3; maxplayers 1\n"); localcmd(games[gameinfo_current].startmap); + RichPresence_Clear(); + RichPresence_Set("status", "Singleplayer: Hard"); } localsound("../media/launch_upmenu1.wav"); header.SetStartEndPos(45,45,70,208); diff --git a/src/platform/richpresence.h b/src/platform/richpresence.h index 830aa097..05005d19 100644 --- a/src/platform/richpresence.h +++ b/src/platform/richpresence.h @@ -15,5 +15,7 @@ */ void RichPresence_Set(string strKey, string strValue); +void RichPresence_DumpInfo(void); +void RichPresence_Clear(void); -//string RichPresence_Get(string strKey); +bool RichPresence_WasSet(void); \ No newline at end of file diff --git a/src/platform/richpresence.qc b/src/platform/richpresence.qc index f873e88a..58363a6d 100644 --- a/src/platform/richpresence.qc +++ b/src/platform/richpresence.qc @@ -1,8 +1,53 @@ +/* extremely primitive rich presence stuff that'll be extended later down the line or something */ + +#define RICHPRESENCE_KEYS 2 + +typedef enum +{ + RICHPRES_STATUS, + RICHPRES_CONNECT +} richpresence_e; + +string g_richpres[RICHPRESENCE_KEYS]; +var bool g_richpresence_set = false; void RichPresence_Set(string strKey, string strValue) { - + switch (strKey) { + /* just fluff */ + case "status": + g_richpres[RICHPRES_STATUS] = strValue; + //print(sprintf("^2Client Rich Presence: Status changed to '%s'\n", strValue)); + break; + /* a command line that'll allow others to join our game */ + case "connect": + g_richpres[RICHPRES_CONNECT] = strValue; + //print(sprintf("^2Client Rich Presence: Connection parm changed to '%s'\n", strValue)); + break; + } + + g_richpresence_set = true; }; +void +RichPresence_Clear(void) +{ + for (int i = 0; i < RICHPRESENCE_KEYS; i++) + g_richpres[i] = ""; + g_richpresence_set = false; +} + +void +RichPresence_DumpInfo(void) +{ + for (int i = 0; i < RICHPRESENCE_KEYS; i++) + print(sprintf("[%i] %s\n", i, g_richpres[i])); +} + +bool +RichPresence_WasSet(void) +{ + return g_richpresence_set; +} \ No newline at end of file