From 39e035239c81669591724459efc32e5426f3250c Mon Sep 17 00:00:00 2001
From: EmeraldLockdown <86802223+EmeraldLoc@users.noreply.github.com>
Date: Fri, 6 Sep 2024 16:08:22 -0500
Subject: [PATCH] Add `djui_attempting_to_open_playerlist` (#195)
---
autogen/lua_definitions/functions.lua | 5 +++++
docs/lua/functions-5.md | 18 ++++++++++++++++++
docs/lua/functions.md | 1 +
src/pc/djui/djui_interactable.c | 16 ++++++++++------
src/pc/djui/djui_panel_playerlist.c | 1 +
src/pc/djui/djui_panel_playerlist.h | 1 +
src/pc/lua/smlua_functions_autogen.c | 16 ++++++++++++++++
src/pc/lua/utils/smlua_misc_utils.c | 4 ++++
src/pc/lua/utils/smlua_misc_utils.h | 1 +
9 files changed, 57 insertions(+), 6 deletions(-)
diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua
index 29da577d8..ccd0bd685 100644
--- a/autogen/lua_definitions/functions.lua
+++ b/autogen/lua_definitions/functions.lua
@@ -8181,6 +8181,11 @@ function deref_s32_pointer(pointer)
-- ...
end
+--- @return boolean
+function djui_attempting_to_open_playerlist()
+ -- ...
+end
+
--- @return boolean
function djui_is_playerlist_open()
-- ...
diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md
index 9e36d7a89..207fccb76 100644
--- a/docs/lua/functions-5.md
+++ b/docs/lua/functions-5.md
@@ -1953,6 +1953,24 @@
+## [djui_attempting_to_open_playerlist](#djui_attempting_to_open_playerlist)
+
+### Lua Example
+`local booleanValue = djui_attempting_to_open_playerlist()`
+
+### Parameters
+- None
+
+### Returns
+- `boolean`
+
+### C Prototype
+`bool djui_attempting_to_open_playerlist(void);`
+
+[:arrow_up_small:](#)
+
+
+
## [djui_is_playerlist_open](#djui_is_playerlist_open)
### Lua Example
diff --git a/docs/lua/functions.md b/docs/lua/functions.md
index 51c3307ec..5cba926d8 100644
--- a/docs/lua/functions.md
+++ b/docs/lua/functions.md
@@ -1719,6 +1719,7 @@
- [allocate_mario_action](functions-5.md#allocate_mario_action)
- [course_is_main_course](functions-5.md#course_is_main_course)
- [deref_s32_pointer](functions-5.md#deref_s32_pointer)
+ - [djui_attempting_to_open_playerlist](functions-5.md#djui_attempting_to_open_playerlist)
- [djui_is_playerlist_open](functions-5.md#djui_is_playerlist_open)
- [djui_is_popup_disabled](functions-5.md#djui_is_popup_disabled)
- [djui_menu_get_font](functions-5.md#djui_menu_get_font)
diff --git a/src/pc/djui/djui_interactable.c b/src/pc/djui/djui_interactable.c
index 295f6e8b9..767e5870b 100644
--- a/src/pc/djui/djui_interactable.c
+++ b/src/pc/djui/djui_interactable.c
@@ -235,15 +235,18 @@ bool djui_interactable_on_key_down(int scancode) {
}
}
- if ((gDjuiPlayerList != NULL || gDjuiModList != NULL) && gServerSettings.enablePlayerList) {
+ if ((gDjuiPlayerList != NULL || gDjuiModList != NULL)) {
for (int i = 0; i < MAX_BINDS; i++) {
if (scancode == (int)configKeyPlayerList[i] && !gDjuiInMainMenu && gNetworkType != NT_NONE) {
- if (gDjuiPlayerList != NULL) {
- djui_base_set_visible(&gDjuiPlayerList->base, true);
- }
- if (gDjuiModList != NULL) {
- djui_base_set_visible(&gDjuiModList->base, true);
+ if (gServerSettings.enablePlayerList) {
+ if (gDjuiPlayerList != NULL) {
+ djui_base_set_visible(&gDjuiPlayerList->base, true);
+ }
+ if (gDjuiModList != NULL) {
+ djui_base_set_visible(&gDjuiModList->base, true);
+ }
}
+ gAttemptingToOpenPlayerlist = true;
break;
}
if (gDjuiPlayerList->base.visible) {
@@ -295,6 +298,7 @@ void djui_interactable_on_key_up(int scancode) {
if (gDjuiModList != NULL) {
djui_base_set_visible(&gDjuiModList->base, false);
}
+ gAttemptingToOpenPlayerlist = false;
break;
}
}
diff --git a/src/pc/djui/djui_panel_playerlist.c b/src/pc/djui/djui_panel_playerlist.c
index f2f168a09..74906dbb9 100644
--- a/src/pc/djui/djui_panel_playerlist.c
+++ b/src/pc/djui/djui_panel_playerlist.c
@@ -11,6 +11,7 @@
#include "pc/utils/misc.h"
struct DjuiThreePanel* gDjuiPlayerList = NULL;
+bool gAttemptingToOpenPlayerlist = false;
static struct DjuiFlowLayout* djuiRow[MAX_PLAYERS] = { 0 };
static struct DjuiImage* djuiImages[MAX_PLAYERS] = { 0 };
diff --git a/src/pc/djui/djui_panel_playerlist.h b/src/pc/djui/djui_panel_playerlist.h
index 7380b673b..2f4f3b117 100644
--- a/src/pc/djui/djui_panel_playerlist.h
+++ b/src/pc/djui/djui_panel_playerlist.h
@@ -2,6 +2,7 @@
#include "djui.h"
extern struct DjuiThreePanel* gDjuiPlayerList;
+extern bool gAttemptingToOpenPlayerlist;
extern const u8 sPlayerListSize;
extern u8 sPageIndex;
diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c
index e1f2a50aa..de3e254ac 100644
--- a/src/pc/lua/smlua_functions_autogen.c
+++ b/src/pc/lua/smlua_functions_autogen.c
@@ -30152,6 +30152,21 @@ int smlua_func_deref_s32_pointer(lua_State* L) {
return 1;
}
+int smlua_func_djui_attempting_to_open_playerlist(UNUSED lua_State* L) {
+ if (L == NULL) { return 0; }
+
+ int top = lua_gettop(L);
+ if (top != 0) {
+ LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "djui_attempting_to_open_playerlist", 0, top);
+ return 0;
+ }
+
+
+ lua_pushboolean(L, djui_attempting_to_open_playerlist());
+
+ return 1;
+}
+
int smlua_func_djui_is_playerlist_open(UNUSED lua_State* L) {
if (L == NULL) { return 0; }
@@ -34668,6 +34683,7 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "allocate_mario_action", smlua_func_allocate_mario_action);
smlua_bind_function(L, "course_is_main_course", smlua_func_course_is_main_course);
smlua_bind_function(L, "deref_s32_pointer", smlua_func_deref_s32_pointer);
+ smlua_bind_function(L, "djui_attempting_to_open_playerlist", smlua_func_djui_attempting_to_open_playerlist);
smlua_bind_function(L, "djui_is_playerlist_open", smlua_func_djui_is_playerlist_open);
smlua_bind_function(L, "djui_is_popup_disabled", smlua_func_djui_is_popup_disabled);
smlua_bind_function(L, "djui_menu_get_font", smlua_func_djui_menu_get_font);
diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c
index 2b2521091..3f41ec827 100644
--- a/src/pc/lua/utils/smlua_misc_utils.c
+++ b/src/pc/lua/utils/smlua_misc_utils.c
@@ -91,6 +91,10 @@ bool djui_is_playerlist_open(void) {
return gDjuiPlayerList->base.visible;
}
+bool djui_attempting_to_open_playerlist(void) {
+ return gAttemptingToOpenPlayerlist;
+}
+
enum DjuiFontType djui_menu_get_font(void) {
return configDjuiThemeFont == 0 ? FONT_NORMAL : FONT_ALIASED;
}
diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h
index 19f3669ed..d09d292b0 100644
--- a/src/pc/lua/utils/smlua_misc_utils.h
+++ b/src/pc/lua/utils/smlua_misc_utils.h
@@ -50,6 +50,7 @@ bool djui_is_popup_disabled(void);
void djui_set_popup_disabled_override(bool value);
void djui_reset_popup_disabled_override(void);
bool djui_is_playerlist_open(void);
+bool djui_attempting_to_open_playerlist(void);
enum DjuiFontType djui_menu_get_font(void);
s8 get_dialog_box_state(void);