DJUI paginated element fixes

This commit is contained in:
MysterD 2023-04-18 12:12:31 -07:00
parent f13541a033
commit c2eac34c4c
8 changed files with 40 additions and 25 deletions

View file

@ -37,7 +37,9 @@ local sKnockbackActions = {
ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB,
ACT_LEDGE_GRAB, ACT_LEDGE_CLIMB_SLOW_1, ACT_LEDGE_CLIMB_SLOW_2, ACT_LEDGE_CLIMB_DOWN, ACT_LEDGE_CLIMB_FAST, ACT_LEDGE_GRAB, ACT_LEDGE_CLIMB_SLOW_1, ACT_LEDGE_CLIMB_SLOW_2, ACT_LEDGE_CLIMB_DOWN, ACT_LEDGE_CLIMB_FAST,
ACT_GROUND_BONK, ACT_SOFT_BONK ACT_GROUND_BONK, ACT_SOFT_BONK,
ACT_STOP_CROUCHING, ACT_STOMACH_SLIDE_STOP,
} }
------------ ------------
-- hammer -- -- hammer --

View file

@ -3245,7 +3245,10 @@ void print_hud_course_complete_coins(s16 x, s16 y) {
void play_star_fanfare_and_flash_hud(s32 arg, u8 starNum) { void play_star_fanfare_and_flash_hud(s32 arg, u8 starNum) {
if (gHudDisplay.coins == gCourseCompleteCoins && (gCurrCourseStarFlags & starNum) == 0 && gHudFlash == 0) { if (gHudDisplay.coins == gCourseCompleteCoins && (gCurrCourseStarFlags & starNum) == 0 && gHudFlash == 0) {
gCurrCourseStarFlags |= starNum; // SM74 was spamming fanfare without this line gCurrCourseStarFlags |= starNum; // SM74 was spamming fanfare without this line
if (gFanFareDebounce <= 0) {
gFanFareDebounce = 30 * 5;
play_star_fanfare(); play_star_fanfare();
}
gHudFlash = arg; gHudFlash = arg;
} }
} }

View file

@ -58,6 +58,7 @@
struct SavedWarpValues gReceiveWarp = { 0 }; struct SavedWarpValues gReceiveWarp = { 0 };
extern s8 sReceivedLoadedActNum; extern s8 sReceivedLoadedActNum;
u8 gRejectInstantWarp = 0; u8 gRejectInstantWarp = 0;
u16 gFanFareDebounce = 0;
s16 gChangeLevel = -1; s16 gChangeLevel = -1;
s16 gChangeLevelTransition = -1; s16 gChangeLevelTransition = -1;
@ -1612,6 +1613,8 @@ s32 update_level(void) {
sFirstCastleGroundsMenu = false; sFirstCastleGroundsMenu = false;
} }
if (gFanFareDebounce > 0) { gFanFareDebounce--; }
s32 changeLevel = 0; s32 changeLevel = 0;
if (gChangeLevel != -1) { if (gChangeLevel != -1) {

View file

@ -103,6 +103,7 @@ struct SavedWarpValues {
extern struct WarpDest sWarpDest; extern struct WarpDest sWarpDest;
extern s8 sWarpCheckpointActive; extern s8 sWarpCheckpointActive;
extern u8 gRejectInstantWarp; extern u8 gRejectInstantWarp;
extern u16 gFanFareDebounce;
extern s16 D_80339EE0; extern s16 D_80339EE0;
extern s16 sDelayedWarpOp; extern s16 sDelayedWarpOp;

View file

@ -62,7 +62,6 @@ static f32 djui_cursor_base_distance(struct DjuiBase* base, f32 xScale, f32 ySca
static void djui_cursor_move_check(s8 xDir, s8 yDir, struct DjuiBase** pick, struct DjuiBase* base) { static void djui_cursor_move_check(s8 xDir, s8 yDir, struct DjuiBase** pick, struct DjuiBase* base) {
if (!base->visible) { return; } if (!base->visible) { return; }
if (!base->enabled) { return; }
if (base->interactable != NULL) { if (base->interactable != NULL) {
f32 x1, y1, x2, y2; f32 x1, y1, x2, y2;

View file

@ -23,33 +23,35 @@ static s32 djui_paginated_get_count(struct DjuiPaginated* paginated) {
return count; return count;
} }
static void djui_paginated_prev(struct DjuiBase* base) { void djui_paginated_update_page_buttons(struct DjuiPaginated* paginated) {
struct DjuiPaginated* paginated = (struct DjuiPaginated*)base->parent; s32 count = djui_paginated_get_count(paginated);
paginated->startIndex -= paginated->showCount; char pageNumString[32] = { 0 };
snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, count / paginated->showCount + 1);
djui_text_set_text(sPageNumText, pageNumString);
djui_base_set_visible(&sPageNumText->base, (count > paginated->showCount));
djui_base_set_enabled(&sPrevButton->base, (paginated->startIndex > 0)); djui_base_set_enabled(&sPrevButton->base, (paginated->startIndex > 0));
djui_base_set_enabled(&sNextButton->base, true); djui_base_set_enabled(&sNextButton->base, ((paginated->startIndex + paginated->showCount) < count));
}
char pageNumString[32] = { 0 }; static void djui_paginated_prev(struct DjuiBase* base) {
snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, djui_paginated_get_count(paginated) / paginated->showCount + 1); struct DjuiPaginated* paginated = (struct DjuiPaginated*)base->parent;
djui_text_set_text(sPageNumText, pageNumString);
paginated->startIndex -= paginated->showCount;
if (paginated->startIndex < 0) { paginated->startIndex = 0; } if (paginated->startIndex < 0) { paginated->startIndex = 0; }
djui_paginated_update_page_buttons(paginated);
} }
static void djui_paginated_next(struct DjuiBase* base) { static void djui_paginated_next(struct DjuiBase* base) {
struct DjuiPaginated* paginated = (struct DjuiPaginated*)base->parent; struct DjuiPaginated* paginated = (struct DjuiPaginated*)base->parent;
paginated->startIndex += paginated->showCount;
s32 count = djui_paginated_get_count(paginated); s32 count = djui_paginated_get_count(paginated);
paginated->startIndex += paginated->showCount;
djui_base_set_enabled(&sNextButton->base, (paginated->startIndex < count - 8));
djui_base_set_enabled(&sPrevButton->base, true);
char pageNumString[32] = { 0 };
snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, count / paginated->showCount + 1);
djui_text_set_text(sPageNumText, pageNumString);
if (paginated->startIndex >= count) { paginated->startIndex -= paginated->showCount; } if (paginated->startIndex >= count) { paginated->startIndex -= paginated->showCount; }
djui_paginated_update_page_buttons(paginated);
} }
void djui_paginated_calculate_height(struct DjuiPaginated* paginated) { void djui_paginated_calculate_height(struct DjuiPaginated* paginated) {
@ -81,10 +83,7 @@ void djui_paginated_calculate_height(struct DjuiPaginated* paginated) {
} }
djui_base_set_size(&paginated->base, paginated->base.width.value, height); djui_base_set_size(&paginated->base, paginated->base.width.value, height);
djui_paginated_update_page_buttons(paginated);
char pageNumString[32] = { 0 };
snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, count / paginated->showCount + 1);
djui_text_set_text(sPageNumText, pageNumString);
} }
bool djui_paginated_render(struct DjuiBase* base) { bool djui_paginated_render(struct DjuiBase* base) {
@ -158,5 +157,7 @@ struct DjuiPaginated* djui_paginated_create(struct DjuiBase* parent, u32 showCou
djui_base_set_size(&sNextButton->base, 128, 32); djui_base_set_size(&sNextButton->base, 128, 32);
paginated->nextButton = sNextButton; paginated->nextButton = sNextButton;
djui_paginated_update_page_buttons(paginated);
return paginated; return paginated;
} }

View file

@ -10,5 +10,6 @@ struct DjuiPaginated {
s32 showCount; s32 showCount;
}; };
void djui_paginated_update_page_buttons(struct DjuiPaginated* paginated);
void djui_paginated_calculate_height(struct DjuiPaginated* paginated); void djui_paginated_calculate_height(struct DjuiPaginated* paginated);
struct DjuiPaginated* djui_paginated_create(struct DjuiBase* parent, u32 showCount); struct DjuiPaginated* djui_paginated_create(struct DjuiBase* parent, u32 showCount);

View file

@ -16,6 +16,7 @@
#define DJUI_DESC_PANEL_WIDTH (410.0f + (16 * 2.0f)) #define DJUI_DESC_PANEL_WIDTH (410.0f + (16 * 2.0f))
static struct DjuiPaginated* sLobbyPaginated = NULL;
static struct DjuiFlowLayout* sLobbyLayout = NULL; static struct DjuiFlowLayout* sLobbyLayout = NULL;
static struct DjuiButton* sRefreshButton = NULL; static struct DjuiButton* sRefreshButton = NULL;
static struct DjuiThreePanel* sDescriptionPanel = NULL; static struct DjuiThreePanel* sDescriptionPanel = NULL;
@ -90,6 +91,7 @@ void djui_panel_join_query(uint64_t aLobbyId, UNUSED uint64_t aOwnerId, uint16_t
struct DjuiBase* layoutBase = &sLobbyLayout->base; struct DjuiBase* layoutBase = &sLobbyLayout->base;
struct DjuiLobbyEntry* entry = djui_lobby_entry_create(layoutBase, (char*)aHostName, (char*)mode, playerText, (char*)aDescription, djui_panel_join_lobby, djui_lobby_on_hover, djui_lobby_on_hover_end); struct DjuiLobbyEntry* entry = djui_lobby_entry_create(layoutBase, (char*)aHostName, (char*)mode, playerText, (char*)aDescription, djui_panel_join_lobby, djui_lobby_on_hover, djui_lobby_on_hover_end);
entry->base.tag = (s64)aLobbyId; entry->base.tag = (s64)aLobbyId;
djui_paginated_update_page_buttons(sLobbyPaginated);
} }
void djui_panel_join_query_finish(void) { void djui_panel_join_query_finish(void) {
@ -103,6 +105,7 @@ void djui_panel_join_query_finish(void) {
djui_base_set_size(&text->base, 1, 1); djui_base_set_size(&text->base, 1, 1);
djui_text_set_alignment(text, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER); djui_text_set_alignment(text, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);
} }
djui_paginated_update_page_buttons(sLobbyPaginated);
} }
void djui_panel_join_lobbies_on_destroy(UNUSED struct DjuiBase* caller) { void djui_panel_join_lobbies_on_destroy(UNUSED struct DjuiBase* caller) {
@ -110,6 +113,7 @@ void djui_panel_join_lobbies_on_destroy(UNUSED struct DjuiBase* caller) {
sPassword = NULL; sPassword = NULL;
sRefreshButton = NULL; sRefreshButton = NULL;
sLobbyLayout = NULL; sLobbyLayout = NULL;
sLobbyPaginated = NULL;
if (sDescriptionPanel != NULL) { if (sDescriptionPanel != NULL) {
djui_base_destroy(&sDescriptionPanel->base); djui_base_destroy(&sDescriptionPanel->base);
@ -121,6 +125,7 @@ void djui_panel_join_lobbies_refresh(UNUSED struct DjuiBase* caller) {
djui_base_destroy_children(&sLobbyLayout->base); djui_base_destroy_children(&sLobbyLayout->base);
djui_text_set_text(sRefreshButton->text, DLANG(LOBBIES, REFRESHING)); djui_text_set_text(sRefreshButton->text, DLANG(LOBBIES, REFRESHING));
djui_base_set_enabled(&sRefreshButton->base, false); djui_base_set_enabled(&sRefreshButton->base, false);
djui_paginated_update_page_buttons(sLobbyPaginated);
ns_coopnet_query(djui_panel_join_query, djui_panel_join_query_finish, sPassword); ns_coopnet_query(djui_panel_join_query, djui_panel_join_query_finish, sPassword);
} }
@ -135,8 +140,8 @@ void djui_panel_join_lobbies_create(struct DjuiBase* caller, const char* passwor
struct DjuiThreePanel* panel = djui_panel_menu_create(private ? DLANG(LOBBIES, PRIVATE_LOBBIES) : DLANG(LOBBIES, PUBLIC_LOBBIES)); struct DjuiThreePanel* panel = djui_panel_menu_create(private ? DLANG(LOBBIES, PRIVATE_LOBBIES) : DLANG(LOBBIES, PUBLIC_LOBBIES));
struct DjuiBase* body = djui_three_panel_get_body(panel); struct DjuiBase* body = djui_three_panel_get_body(panel);
{ {
struct DjuiPaginated* paginated = djui_paginated_create(body, 8); sLobbyPaginated = djui_paginated_create(body, 8);
sLobbyLayout = paginated->layout; sLobbyLayout = sLobbyPaginated->layout;
djui_flow_layout_set_margin(sLobbyLayout, 4); djui_flow_layout_set_margin(sLobbyLayout, 4);
bool querying = ns_coopnet_query(djui_panel_join_query, djui_panel_join_query_finish, password); bool querying = ns_coopnet_query(djui_panel_join_query, djui_panel_join_query_finish, password);