From dab7cf4c2b9b95c239ee4d055c516805148b924e Mon Sep 17 00:00:00 2001 From: MysterD Date: Wed, 16 Feb 2022 22:30:17 -0800 Subject: [PATCH] Added player description to player list --- docs/lua/functions.md | 26 +++++++++++++++++++ docs/lua/structs.md | 5 ++++ mods/hide-and-seek.lua | 8 ++++++ src/pc/configfile.h | 1 + src/pc/controller/controller_keyboard_debug.c | 2 +- src/pc/djui/djui_panel_modlist.c | 2 +- src/pc/djui/djui_panel_playerlist.c | 23 +++++++++++----- src/pc/lua/smlua_cobject_autogen.c | 7 ++++- src/pc/lua/smlua_functions_autogen.c | 22 ++++++++++++++++ src/pc/network/network_player.c | 16 ++++++++++++ src/pc/network/network_player.h | 11 ++++++++ 11 files changed, 114 insertions(+), 9 deletions(-) diff --git a/docs/lua/functions.md b/docs/lua/functions.md index 40ae0e65..4a6c7111 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -281,6 +281,7 @@ - [get_network_player_smallest_global](#get_network_player_smallest_global) - [network_player_connected_count](#network_player_connected_count) - [network_player_from_global_index](#network_player_from_global_index) + - [network_player_set_description](#network_player_set_description)
@@ -4815,6 +4816,31 @@
+## [network_player_set_description](#network_player_set_description) + +### Lua Example +`network_player_set_description(np, description, r, g, b, a)` + +### Parameters +| Field | Type | +| ----- | ---- | +| np | [NetworkPlayer](structs.md#NetworkPlayer) | +| description | string | +| r | integer | +| g | integer | +| b | integer | +| a | integer | + +### Returns +- None + +### C Prototype +`void network_player_set_description(struct NetworkPlayer* np, const char* description, u8 r, u8 g, u8 b, u8 a);` + +[:arrow_up_small:](#) + +
+ --- # functions from network_utils.h diff --git a/docs/lua/structs.md b/docs/lua/structs.md index 004212c4..cde8c654 100644 --- a/docs/lua/structs.md +++ b/docs/lua/structs.md @@ -598,6 +598,11 @@ | currLevelAreaSeqId | integer | read-only | | currLevelNum | integer | read-only | | currLevelSyncValid | bool | read-only | +| description | string | read-only | +| descriptionA | integer | read-only | +| descriptionB | integer | read-only | +| descriptionG | integer | read-only | +| descriptionR | integer | read-only | | fadeOpacity | integer | read-only | | globalIndex | integer | read-only | | lastReceived | number | read-only | diff --git a/mods/hide-and-seek.lua b/mods/hide-and-seek.lua index 8366a485..d1eb3891 100644 --- a/mods/hide-and-seek.lua +++ b/mods/hide-and-seek.lua @@ -247,6 +247,7 @@ function on_player_connected(m) -- start out as a non-seeker local s = gPlayerSyncTable[m.playerIndex] s.seeking = true + network_player_set_description(gNetworkPlayers[m.playerIndex], "seeker", 255, 64, 64, 255) end function hud_top_render() @@ -420,6 +421,12 @@ function on_seeking_changed(tag, oldVal, newVal) sLastSeekerIndex = m.playerIndex sRoundTimer = 0 end + + if newVal then + network_player_set_description(np, "seeker", 255, 64, 64, 255) + else + network_player_set_description(np, "hider", 128, 128, 128, 255) + end end ----------- @@ -440,4 +447,5 @@ hook_on_sync_table_change(gGlobalSyncTable, 'roundState', 0, on_round_state_chan for i=0,(MAX_PLAYERS-1) do gPlayerSyncTable[i].seeking = true hook_on_sync_table_change(gPlayerSyncTable[i], 'seeking', i, on_seeking_changed) + network_player_set_description(gNetworkPlayers[i], "seeker", 255, 64, 64, 255) end diff --git a/src/pc/configfile.h b/src/pc/configfile.h index ba2614db..425f572a 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -9,6 +9,7 @@ #define MAX_VOLUME 127 #define MAX_CONFIG_STRING 64 #define MAX_PLAYER_STRING 20 +#define MAX_DESCRIPTION_STRING 20 #define DEFAULT_PORT 7777 diff --git a/src/pc/controller/controller_keyboard_debug.c b/src/pc/controller/controller_keyboard_debug.c index 960496ad..6910309d 100644 --- a/src/pc/controller/controller_keyboard_debug.c +++ b/src/pc/controller/controller_keyboard_debug.c @@ -14,7 +14,7 @@ #ifdef DEBUG #include "pc/lua/smlua.h" -static u8 warpToLevel = LEVEL_BOB; +static u8 warpToLevel = LEVEL_SSL; static u8 warpToArea = 27; // warpToArea: 26 = basement // warpToArea: 27 = upstairs diff --git a/src/pc/djui/djui_panel_modlist.c b/src/pc/djui/djui_panel_modlist.c index 91c20131..5fab4106 100644 --- a/src/pc/djui/djui_panel_modlist.c +++ b/src/pc/djui/djui_panel_modlist.c @@ -6,7 +6,7 @@ struct DjuiThreePanel* gDjuiModList = NULL; void djui_panel_modlist_create(UNUSED struct DjuiBase* caller) { - int playerListWidth = 580; + int playerListWidth = 585; int modListWidth = 280; // delete old mod list diff --git a/src/pc/djui/djui_panel_playerlist.c b/src/pc/djui/djui_panel_playerlist.c index 14f8b5ac..dfe9417e 100644 --- a/src/pc/djui/djui_panel_playerlist.c +++ b/src/pc/djui/djui_panel_playerlist.c @@ -13,6 +13,7 @@ struct DjuiThreePanel* gDjuiPlayerList = NULL; static struct DjuiFlowLayout* djuiRow[MAX_PLAYERS] = { 0 }; static struct DjuiImage* djuiImages[MAX_PLAYERS] = { 0 }; static struct DjuiText* djuiTextNames[MAX_PLAYERS] = { 0 }; +static struct DjuiText* djuiTextDescriptions[MAX_PLAYERS] = { 0 }; static struct DjuiText* djuiTextLocations[MAX_PLAYERS] = { 0 }; static void playerlist_update_row(u8 i, struct NetworkPlayer* np) { @@ -31,6 +32,9 @@ static void playerlist_update_row(u8 i, struct NetworkPlayer* np) { djui_base_set_color(&djuiTextNames[i]->base, rgb[0], rgb[1], rgb[2], 255); djui_text_set_text(djuiTextNames[i], np->name); + djui_base_set_color(&djuiTextDescriptions[i]->base, np->descriptionR, np->descriptionG, np->descriptionB, np->descriptionA); + djui_text_set_text(djuiTextDescriptions[i], np->description); + djui_text_set_text(djuiTextLocations[i], get_level_name(np->currCourseNum, np->currLevelNum, np->currAreaIndex)); } @@ -56,7 +60,7 @@ void djui_panel_playerlist_create(UNUSED struct DjuiBase* caller) { panel->base.on_render_pre = djui_panel_playerlist_on_render_pre; djui_base_set_alignment(&panel->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER); djui_base_set_size_type(&panel->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&panel->base, 580, bodyHeight + (32 + 16) + 32 + 32); + djui_base_set_size(&panel->base, 585, bodyHeight + (32 + 16) + 32 + 32); djui_base_set_visible(&panel->base, false); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); djui_flow_layout_set_margin(body, 4); @@ -84,11 +88,18 @@ void djui_panel_playerlist_create(UNUSED struct DjuiBase* caller) { djui_base_set_color(&t2->base, t, t, t, 255); djuiTextNames[i] = t2; - struct DjuiText* t3 = djui_text_create(&row->base, "location"); + struct DjuiText* t3 = djui_text_create(&row->base, ""); djui_base_set_size_type(&t3->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&t3->base, 300, 32.0f); - djui_base_set_color(&t3->base, t, t, t, 255); - djui_text_set_alignment(t3, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djuiTextLocations[i] = t3; + djui_base_set_size(&t3->base, 100, 32.0f); + djui_base_set_color(&t3->base, 220, 220, 220, 255); + djui_text_set_alignment(t3, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP); + djuiTextDescriptions[i] = t3; + + struct DjuiText* t4 = djui_text_create(&row->base, "location"); + djui_base_set_size_type(&t4->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(&t4->base, 300 - 100, 32.0f); + djui_base_set_color(&t4->base, t, t, t, 255); + djui_text_set_alignment(t4, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); + djuiTextLocations[i] = t4; } } diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c index e6af69eb..8362c44c 100644 --- a/src/pc/lua/smlua_cobject_autogen.c +++ b/src/pc/lua/smlua_cobject_autogen.c @@ -447,7 +447,7 @@ static struct LuaObjectField sModeTransitionInfoFields[LUA_MODE_TRANSITION_INFO_ { "transitionStart", LVT_COBJECT, offsetof(struct ModeTransitionInfo, transitionStart), true, LOT_LINEARTRANSITIONPOINT }, }; -#define LUA_NETWORK_PLAYER_FIELD_COUNT 18 +#define LUA_NETWORK_PLAYER_FIELD_COUNT 23 static struct LuaObjectField sNetworkPlayerFields[LUA_NETWORK_PLAYER_FIELD_COUNT] = { { "connected", LVT_BOOL, offsetof(struct NetworkPlayer, connected), true, LOT_NONE }, { "currActNum", LVT_S16, offsetof(struct NetworkPlayer, currActNum), true, LOT_NONE }, @@ -457,6 +457,11 @@ static struct LuaObjectField sNetworkPlayerFields[LUA_NETWORK_PLAYER_FIELD_COUNT { "currLevelAreaSeqId", LVT_U16, offsetof(struct NetworkPlayer, currLevelAreaSeqId), true, LOT_NONE }, { "currLevelNum", LVT_S16, offsetof(struct NetworkPlayer, currLevelNum), true, LOT_NONE }, { "currLevelSyncValid", LVT_BOOL, offsetof(struct NetworkPlayer, currLevelSyncValid), true, LOT_NONE }, + { "description", LVT_STRING, offsetof(struct NetworkPlayer, description), true, LOT_NONE }, + { "descriptionA", LVT_U8, offsetof(struct NetworkPlayer, descriptionA), true, LOT_NONE }, + { "descriptionB", LVT_U8, offsetof(struct NetworkPlayer, descriptionB), true, LOT_NONE }, + { "descriptionG", LVT_U8, offsetof(struct NetworkPlayer, descriptionG), true, LOT_NONE }, + { "descriptionR", LVT_U8, offsetof(struct NetworkPlayer, descriptionR), true, LOT_NONE }, { "fadeOpacity", LVT_U8, offsetof(struct NetworkPlayer, fadeOpacity), true, LOT_NONE }, { "globalIndex", LVT_U8, offsetof(struct NetworkPlayer, globalIndex), true, LOT_NONE }, { "lastReceived", LVT_F32, offsetof(struct NetworkPlayer, lastReceived), true, LOT_NONE }, diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 4546e34e..1707e54c 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -2995,6 +2995,27 @@ int smlua_func_network_player_from_global_index(lua_State* L) { return 1; } +int smlua_func_network_player_set_description(lua_State* L) { + if(!smlua_functions_valid_param_count(L, 6)) { return 0; } + + struct NetworkPlayer* np = (struct NetworkPlayer*)smlua_to_cobject(L, 1, LOT_NETWORKPLAYER); + if (!gSmLuaConvertSuccess) { return 0; } + const char* description = smlua_to_string(L, 2); + if (!gSmLuaConvertSuccess) { return 0; } + u8 r = smlua_to_integer(L, 3); + if (!gSmLuaConvertSuccess) { return 0; } + u8 g = smlua_to_integer(L, 4); + if (!gSmLuaConvertSuccess) { return 0; } + u8 b = smlua_to_integer(L, 5); + if (!gSmLuaConvertSuccess) { return 0; } + u8 a = smlua_to_integer(L, 6); + if (!gSmLuaConvertSuccess) { return 0; } + + network_player_set_description(np, description, r, g, b, a); + + return 1; +} + ///////////////////// // network_utils.h // ///////////////////// @@ -3793,6 +3814,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "get_network_player_smallest_global", smlua_func_get_network_player_smallest_global); smlua_bind_function(L, "network_player_connected_count", smlua_func_network_player_connected_count); smlua_bind_function(L, "network_player_from_global_index", smlua_func_network_player_from_global_index); + smlua_bind_function(L, "network_player_set_description", smlua_func_network_player_set_description); // network_utils.h smlua_bind_function(L, "network_get_player_text_color_string", smlua_func_network_get_player_text_color_string); diff --git a/src/pc/network/network_player.c b/src/pc/network/network_player.c index f19c9b17..c9d44a36 100644 --- a/src/pc/network/network_player.c +++ b/src/pc/network/network_player.c @@ -42,6 +42,21 @@ u8 network_player_connected_count(void) { return count; } +void network_player_set_description(struct NetworkPlayer* np, const char* description, u8 r, u8 g, u8 b, u8 a) { + if (np == NULL) { return; } + + if (description != NULL) { + snprintf(np->description, MAX_DESCRIPTION_STRING, "%s", description); + } else { + np->description[0] = '\0'; + } + + np->descriptionR = r; + np->descriptionG = g; + np->descriptionB = b; + np->descriptionA = a; +} + struct NetworkPlayer* network_player_from_global_index(u8 globalIndex) { for (int i = 0; i < MAX_PLAYERS; i++) { if (!gNetworkPlayers[i].connected) { continue; } @@ -181,6 +196,7 @@ u8 network_player_connected(enum NetworkPlayerType type, u8 globalIndex, u8 mode np->localIndex = localIndex; np->globalIndex = globalIndex; if ((type != NPT_LOCAL) && (gNetworkType == NT_SERVER || type == NPT_SERVER)) { gNetworkSystem->save_id(localIndex, 0); } + network_player_set_description(np, NULL, 0, 0, 0, 0); // update course/level np->currLevelAreaSeqId = 0; diff --git a/src/pc/network/network_player.h b/src/pc/network/network_player.h index b5bf10ba..eecb675c 100644 --- a/src/pc/network/network_player.h +++ b/src/pc/network/network_player.h @@ -37,6 +37,13 @@ struct NetworkPlayer { u8 modelIndex; u8 paletteIndex; char name[MAX_PLAYER_STRING+1]; + + char description[MAX_DESCRIPTION_STRING+1]; + u8 descriptionR; + u8 descriptionG; + u8 descriptionB; + u8 descriptionA; + u16 rxSeqIds[MAX_RX_SEQ_IDS]; u32 rxPacketHash[MAX_RX_SEQ_IDS]; }; @@ -49,14 +56,18 @@ void network_player_init(void); void network_player_update_model(u8 localIndex); bool network_player_any_connected(void); u8 network_player_connected_count(void); +void network_player_set_description(struct NetworkPlayer* np, const char* description, u8 r, u8 g, u8 b, u8 a); struct NetworkPlayer* network_player_from_global_index(u8 globalIndex); struct NetworkPlayer* get_network_player_from_level(s16 courseNum, s16 actNum, s16 levelNum); struct NetworkPlayer* get_network_player_from_area(s16 courseNum, s16 actNum, s16 levelNum, s16 areaIndex); struct NetworkPlayer* get_network_player_smallest_global(void); + void network_player_update(void); + u8 network_player_connected(enum NetworkPlayerType type, u8 globalIndex, u8 modelIndex, u8 paletteIndex, char* name); u8 network_player_disconnected(u8 globalIndex); + void network_player_update_course_level(struct NetworkPlayer* np, s16 courseNum, s16 actNum, s16 levelNum, s16 areaIndex); void network_player_shutdown(void);