From bf9f0880b6e641619856e591954036a71727d8f6 Mon Sep 17 00:00:00 2001 From: G Sai Nikhilesh <134734453+Nikhilesh002@users.noreply.github.com> Date: Mon, 18 Aug 2025 02:32:29 +0530 Subject: [PATCH] [UI/UX] Add Username to Stats Screen (#6270) * [Feature] Add Username to Stats Screen * [Feature] username fallback to "Guest" * [UI/UX] Update display name fallback to use translation for guest user * Update locales submodule * [Fix] Username updates without refresh * Update locales submodule --------- Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- public/locales | 2 +- src/ui/game-stats-ui-handler.ts | 30 ++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/public/locales b/public/locales index 38d7c1baa23..7fa231e7239 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 38d7c1baa2367582770d62b3f4b0239874c1c7e5 +Subproject commit 7fa231e7239ed23e17a026670c007c97c3cd9e4a diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index ed66230bed7..d2a9779f515 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -1,7 +1,9 @@ +import { loggedInUser } from "#app/account"; import { globalScene } from "#app/global-scene"; import { speciesStarterCosts } from "#balance/starters"; import { Button } from "#enums/buttons"; import { DexAttr } from "#enums/dex-attr"; +import { PlayerGender } from "#enums/player-gender"; import { TextStyle } from "#enums/text-style"; import { UiTheme } from "#enums/ui-theme"; import type { GameData } from "#system/game-data"; @@ -227,6 +229,9 @@ export class GameStatsUiHandler extends UiHandler { private arrowUp: Phaser.GameObjects.Sprite; private arrowDown: Phaser.GameObjects.Sprite; + /** Logged in username */ + private headerText: Phaser.GameObjects.Text; + /** Whether the UI is single column mode */ private get singleCol(): boolean { const resolvedLang = i18next.resolvedLanguage ?? "en"; @@ -296,6 +301,23 @@ export class GameStatsUiHandler extends UiHandler { return GameStatsUiHandler.ROWS_PER_PAGE * this.columnCount; } + /** + * Returns the username of logged in user. If the username is hidden, the trainer name based on gender will be displayed. + * @returns The username of logged in user + */ + private getUsername(): string { + const usernameReplacement = + globalScene.gameData.gender === PlayerGender.FEMALE + ? i18next.t("trainerNames:player_f") + : i18next.t("trainerNames:player_m"); + + const displayName = !globalScene.hideUsername + ? (loggedInUser?.username ?? i18next.t("common:guest")) + : usernameReplacement; + + return i18next.t("gameStatsUiHandler:stats", { username: displayName }); + } + // #endregion Columnar-specific properties setup() { @@ -316,11 +338,11 @@ export class GameStatsUiHandler extends UiHandler { const headerBg = addWindow(0, 0, sWidth - 2, 24).setOrigin(0); - const headerText = addTextObject(0, 0, i18next.t("gameStatsUiHandler:stats"), TextStyle.HEADER_LABEL) + this.headerText = addTextObject(0, 0, this.getUsername(), TextStyle.HEADER_LABEL) .setOrigin(0) .setPositionRelative(headerBg, 8, 4); - this.gameStatsContainer.add([headerBg, headerText]); + this.gameStatsContainer.add([headerBg, this.headerText]); const colWidth = this.colWidth; @@ -368,6 +390,10 @@ export class GameStatsUiHandler extends UiHandler { show(args: any[]): boolean { super.show(args); + + // show updated username on every render + this.headerText.setText(this.getUsername()); + this.gameStatsContainer.setActive(true).setVisible(true); this.arrowUp.setActive(true).play("prompt").setVisible(false);