From b6a3733bf012bf92e114fec7f20fd1706f6aa538 Mon Sep 17 00:00:00 2001 From: MysterD Date: Thu, 3 Feb 2022 19:05:59 -0800 Subject: [PATCH] Added network_get_player_text_color_string() to lua api --- autogen/convert_functions.py | 4 +++- autogen/lua_constants/built-in.lua | 14 ++++++++++++++ docs/lua/functions.md | 21 +++++++++++++++++++++ src/pc/djui/djui_chat_message.c | 6 ++++-- src/pc/djui/djui_panel_playerlist.c | 2 +- src/pc/lua/smlua_constants_autogen.c | 12 ++++++++++++ src/pc/lua/smlua_functions_autogen.c | 26 ++++++++++++++++++++++++++ src/pc/network/network_player.c | 16 ++++++++-------- src/pc/network/network_utils.c | 23 +++++++++++++++++++++++ src/pc/network/network_utils.h | 3 +++ src/pc/network/packets/packet_player.c | 4 ++-- 11 files changed, 117 insertions(+), 14 deletions(-) diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py index fdfb814e1..2a89108fa 100644 --- a/autogen/convert_functions.py +++ b/autogen/convert_functions.py @@ -202,7 +202,9 @@ def build_call(function): lfunc = 'lua_pushnumber' elif ftype == 'bool': lfunc = 'lua_pushboolean' - elif '???' not in flot: + elif ftype == 'char*': + lfunc = 'lua_pushstring' + elif '???' not in flot and flot != 'LOT_NONE': return ' smlua_push_object(L, %s, %s);\n' % (flot, ccall) return ' %s(L, %s);\n' % (lfunc, ccall) diff --git a/autogen/lua_constants/built-in.lua b/autogen/lua_constants/built-in.lua index baa33a5d8..322130b60 100644 --- a/autogen/lua_constants/built-in.lua +++ b/autogen/lua_constants/built-in.lua @@ -66,6 +66,13 @@ function vec3f_mul(dest, a) return dest end +function vec3f_dist(v1, v2) + dx = v1.x - v2.x + dy = v1.y - v2.y + dz = v1.z - v2.z + return math.sqrt(dx * dx + dy * dy + dz * dz) +end + function vec3s_copy(dest, src) dest.x = src.x dest.y = src.y @@ -101,6 +108,13 @@ function vec3s_mul(dest, a) return dest end +function vec3s_dist(v1, v2) + dx = v1.x - v2.x + dy = v1.y - v2.y + dz = v1.z - v2.z + return math.sqrt(dx * dx + dy * dy + dz * dz) +end + function approach_f32(current, target, inc, dec) if current < target then current = current + inc diff --git a/docs/lua/functions.md b/docs/lua/functions.md index 0a355a9b3..1c6a3249d 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -241,6 +241,7 @@
- network_utils.h + - [network_get_player_text_color_string](#network_get_player_text_color_string) - [network_global_index_from_local](#network_global_index_from_local) - [network_is_server](#network_is_server) - [network_local_index_from_global](#network_local_index_from_global) @@ -4143,6 +4144,26 @@
+## [network_get_player_text_color_string](#network_get_player_text_color_string) + +### Lua Example +`local stringValue = network_get_player_text_color_string(localIndex)` + +### Parameters +| Field | Type | +| ----- | ---- | +| localIndex | integer | + +### Returns +- string + +### C Prototype +`char* network_get_player_text_color_string(u8 localIndex);` + +[:arrow_up_small:](#) + +
+ ## [network_global_index_from_local](#network_global_index_from_local) ### Lua Example diff --git a/src/pc/djui/djui_chat_message.c b/src/pc/djui/djui_chat_message.c index a2373923b..92ace0351 100644 --- a/src/pc/djui/djui_chat_message.c +++ b/src/pc/djui/djui_chat_message.c @@ -45,9 +45,11 @@ static void djui_chat_message_destroy(struct DjuiBase* base) { void djui_chat_message_create_from(u8 globalIndex, const char* message) { struct NetworkPlayer* np = network_player_from_global_index(globalIndex); - u8* rgb = get_player_color(np->paletteIndex, 0); + + char* playerColorString = network_get_player_text_color_string(np->localIndex); char chatMsg[256] = { 0 }; - snprintf(chatMsg, 256, "\\#%02x%02x%02x\\%s:\\#dcdcdc\\ %s", rgb[0], rgb[1], rgb[2], (np != NULL) ? np->name : "Player", message); + snprintf(chatMsg, 256, "%s%s:\\#dcdcdc\\ %s", playerColorString, (np != NULL) ? np->name : "Player", message); + play_sound((globalIndex == gNetworkPlayerLocal->globalIndex) ? SOUND_MENU_MESSAGE_DISAPPEAR : SOUND_MENU_MESSAGE_APPEAR, gDefaultSoundArgs); djui_chat_message_create(chatMsg); } diff --git a/src/pc/djui/djui_panel_playerlist.c b/src/pc/djui/djui_panel_playerlist.c index d9c2f2cc1..5b4614573 100644 --- a/src/pc/djui/djui_panel_playerlist.c +++ b/src/pc/djui/djui_panel_playerlist.c @@ -27,7 +27,7 @@ static void playerlist_update_row(u8 i, struct NetworkPlayer* np) { djui_base_set_visible(&djuiRow[i]->base, visible); - u8* rgb = get_player_color(np->paletteIndex, 0); + u8* rgb = network_get_player_text_color(np->localIndex); djui_base_set_color(&djuiTextNames[i]->base, rgb[0], rgb[1], rgb[2], 255); djui_text_set_text(djuiTextNames[i], np->name); diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c index 89c1454c9..9c95a2eb8 100644 --- a/src/pc/lua/smlua_constants_autogen.c +++ b/src/pc/lua/smlua_constants_autogen.c @@ -59,6 +59,12 @@ char gSmluaConstants[] = "" " dest.z = dest.z * a\n" " return dest\n" "end\n" +"function vec3f_dist(v1, v2)\n" +" dx = v1.x - v2.x\n" +" dy = v1.y - v2.y\n" +" dz = v1.z - v2.z\n" +" return math.sqrt(dx * dx + dy * dy + dz * dz)\n" +"end\n" "function vec3s_copy(dest, src)\n" " dest.x = src.x\n" " dest.y = src.y\n" @@ -89,6 +95,12 @@ char gSmluaConstants[] = "" " dest.z = dest.z * a\n" " return dest\n" "end\n" +"function vec3s_dist(v1, v2)\n" +" dx = v1.x - v2.x\n" +" dy = v1.y - v2.y\n" +" dz = v1.z - v2.z\n" +" return math.sqrt(dx * dx + dy * dy + dz * dz)\n" +"end\n" "function approach_f32(current, target, inc, dec)\n" " if current < target then\n" " current = current + inc\n" diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 9cec71770..eb5e81b35 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -2630,6 +2630,30 @@ int smlua_func_stop_and_set_height_to_floor(lua_State* L) { // network_utils.h // ///////////////////// +/* +int smlua_func_network_get_player_text_color(lua_State* L) { + if(!smlua_functions_valid_param_count(L, 1)) { return 0; } + + u8 localIndex = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { return 0; } + + UNIMPLEMENTED -->(L, network_get_player_text_color(localIndex)); + + return 1; +} +*/ + +int smlua_func_network_get_player_text_color_string(lua_State* L) { + if(!smlua_functions_valid_param_count(L, 1)) { return 0; } + + u8 localIndex = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { return 0; } + + lua_pushstring(L, network_get_player_text_color_string(localIndex)); + + return 1; +} + int smlua_func_network_global_index_from_local(lua_State* L) { if(!smlua_functions_valid_param_count(L, 1)) { return 0; } @@ -3115,6 +3139,8 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "stop_and_set_height_to_floor", smlua_func_stop_and_set_height_to_floor); // network_utils.h + //smlua_bind_function(L, "network_get_player_text_color", smlua_func_network_get_player_text_color); <--- UNIMPLEMENTED + smlua_bind_function(L, "network_get_player_text_color_string", smlua_func_network_get_player_text_color_string); smlua_bind_function(L, "network_global_index_from_local", smlua_func_network_global_index_from_local); smlua_bind_function(L, "network_is_server", smlua_func_network_is_server); smlua_bind_function(L, "network_local_index_from_global", smlua_func_network_local_index_from_global); diff --git a/src/pc/network/network_player.c b/src/pc/network/network_player.c index 71064bc84..442ecb7b4 100644 --- a/src/pc/network/network_player.c +++ b/src/pc/network/network_player.c @@ -219,9 +219,9 @@ u8 network_player_connected(enum NetworkPlayerType type, u8 globalIndex, u8 mode // display connected popup if (type != NPT_SERVER && (gNetworkType != NT_SERVER || type != NPT_LOCAL)) { - u8* rgb = get_player_color(np->paletteIndex, 0); + char* playerColorString = network_get_player_text_color_string(np->localIndex); char popupMsg[128] = { 0 }; - snprintf(popupMsg, 128, "\\#%02x%02x%02x\\%s\\#dcdcdc\\ connected", rgb[0], rgb[1], rgb[2], np->name); + snprintf(popupMsg, 128, "%s%s\\#dcdcdc\\ connected", playerColorString, np->name); djui_popup_create(popupMsg, 1); } LOG_INFO("player connected, local %d, global %d", localIndex, np->globalIndex); @@ -264,9 +264,9 @@ u8 network_player_disconnected(u8 globalIndex) { LOG_INFO("player disconnected, local %d, global %d", i, globalIndex); // display popup - u8* rgb = get_player_color(np->paletteIndex, 0); + char* playerColorString = network_get_player_text_color_string(np->localIndex); char popupMsg[128] = { 0 }; - snprintf(popupMsg, 128, "\\#%02x%02x%02x\\%s\\#dcdcdc\\ disconnected", rgb[0], rgb[1], rgb[2], np->name); + snprintf(popupMsg, 128, "%s%s\\#dcdcdc\\ disconnected", playerColorString, np->name); djui_popup_create(popupMsg, 1); packet_ordered_clear(globalIndex); @@ -282,15 +282,15 @@ u8 network_player_disconnected(u8 globalIndex) { void network_player_update_course_level(struct NetworkPlayer* np, s16 courseNum, s16 actNum, s16 levelNum, s16 areaIndex) { // display popup if (np->currCourseNum != courseNum && np->localIndex != 0) { - u8* rgb = get_player_color(np->paletteIndex, 0); + char* playerColorString = network_get_player_text_color_string(np->localIndex); char popupMsg[128] = { 0 }; bool matchingLocal = (np->currCourseNum == gNetworkPlayerLocal->currCourseNum) && (np->currActNum == gNetworkPlayerLocal->currActNum); if (matchingLocal && gNetworkPlayerLocal->currCourseNum != 0) { - snprintf(popupMsg, 128, "\\#%02x%02x%02x\\%s\\#dcdcdc\\ left this level", rgb[0], rgb[1], rgb[2], np->name); + snprintf(popupMsg, 128, "%s%s\\#dcdcdc\\ left this level", playerColorString, np->name); } else if (matchingLocal && gNetworkPlayerLocal->currCourseNum != 0) { - snprintf(popupMsg, 128, "\\#%02x%02x%02x\\%s\\#dcdcdc\\ entered this level", rgb[0], rgb[1], rgb[2], np->name); + snprintf(popupMsg, 128, "%s%s\\#dcdcdc\\ entered this level", playerColorString, np->name); } else { - snprintf(popupMsg, 128, "\\#%02x%02x%02x\\%s\\#dcdcdc\\ entered\n%s", rgb[0], rgb[1], rgb[2], np->name, get_level_name(courseNum, levelNum, areaIndex)); + snprintf(popupMsg, 128, "%s%s\\#dcdcdc\\ entered\n%s", playerColorString, np->name, get_level_name(courseNum, levelNum, areaIndex)); } djui_popup_create(popupMsg, 1); } diff --git a/src/pc/network/network_utils.c b/src/pc/network/network_utils.c index fd51c2897..a538f2b34 100644 --- a/src/pc/network/network_utils.c +++ b/src/pc/network/network_utils.c @@ -1,4 +1,6 @@ +#include #include "network_utils.h" +#include "game/mario_misc.h" u8 network_global_index_from_local(u8 localIndex) { if (gNetworkType == NT_SERVER) { return localIndex; } @@ -23,3 +25,24 @@ u8 network_local_index_from_global(u8 globalIndex) { bool network_is_server(void) { return gNetworkType == NT_SERVER; } + +u8* network_get_player_text_color(u8 localIndex) { + if (localIndex >= MAX_PLAYERS) { localIndex = 0; } + + struct NetworkPlayer* np = &gNetworkPlayers[localIndex]; + u8* rgb = get_player_color(np->paletteIndex, 0); + static u8 sTextRgb[3] = { 0 }; + for (int i = 0; i < 3; i++) { + sTextRgb[i] = 127 + rgb[i] / 2; + } + + return sTextRgb; +} + +char* network_get_player_text_color_string(u8 localIndex) { + if (localIndex >= MAX_PLAYERS) { localIndex = 0; } + u8* rgb = network_get_player_text_color(localIndex); + static char sColorString[10] = { 0 }; + snprintf(sColorString, 10, "\\#%02x%02x%02x\\", rgb[0], rgb[1], rgb[2]); + return sColorString; +} diff --git a/src/pc/network/network_utils.h b/src/pc/network/network_utils.h index 3be574622..5bb025a40 100644 --- a/src/pc/network/network_utils.h +++ b/src/pc/network/network_utils.h @@ -9,4 +9,7 @@ u8 network_local_index_from_global(u8 globalIndex); bool network_is_server(void); +u8* network_get_player_text_color(u8 localIndex); +char* network_get_player_text_color_string(u8 localIndex); + #endif \ No newline at end of file diff --git a/src/pc/network/packets/packet_player.c b/src/pc/network/packets/packet_player.c index d896353d8..921c04835 100644 --- a/src/pc/network/packets/packet_player.c +++ b/src/pc/network/packets/packet_player.c @@ -339,9 +339,9 @@ void network_receive_player(struct Packet* p) { // inform of player death if (oldData.action != ACT_BUBBLED && data.action == ACT_BUBBLED) { // display popup - u8* rgb = get_player_color(np->paletteIndex, 0); + char* playerColorString = network_get_player_text_color_string(np->localIndex); char popupMsg[128] = { 0 }; - snprintf(popupMsg, 128, "\\#%02x%02x%02x\\%s\\#dcdcdc\\ died", rgb[0], rgb[1], rgb[2], np->name); + snprintf(popupMsg, 128, "%s%s\\#dcdcdc\\ died", playerColorString, np->name); djui_popup_create(popupMsg, 1); }