Added player description to player list

This commit is contained in:
MysterD 2022-02-16 22:30:17 -08:00
parent 6198a1208d
commit dab7cf4c2b
11 changed files with 114 additions and 9 deletions

View file

@ -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)
<br />
@ -4815,6 +4816,31 @@
<br />
## [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:](#)
<br />
---
# functions from network_utils.h

View file

@ -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 |

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;
}
}

View file

@ -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 },

View file

@ -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);

View file

@ -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;

View file

@ -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);