From cf70339e36c2bfcf75076ce670a7f9358af5c262 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 6 Aug 2025 22:18:22 -0700 Subject: [PATCH] Add all active challenges to default challenge session name if possible If more than 3 challenges are active, only the first 3 are added to the name (to prevent the text going off-screen) and then "..." is appended to the end to indicate there were more challenges active than the ones listed --- src/ui/rename-run-ui-handler.ts | 2 +- src/ui/save-slot-select-ui-handler.ts | 42 ++++++++++++++++++++------- src/ui/ui.ts | 2 +- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/ui/rename-run-ui-handler.ts b/src/ui/rename-run-ui-handler.ts index 113f432693a..23ba0137f2d 100644 --- a/src/ui/rename-run-ui-handler.ts +++ b/src/ui/rename-run-ui-handler.ts @@ -3,7 +3,7 @@ import type { InputFieldConfig } from "./form-modal-ui-handler"; import { FormModalUiHandler } from "./form-modal-ui-handler"; import type { ModalConfig } from "./modal-ui-handler"; -export default class RenameRunFormUiHandler extends FormModalUiHandler { +export class RenameRunFormUiHandler extends FormModalUiHandler { getModalTitle(_config?: ModalConfig): string { return i18next.t("menu:renamerun"); } diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index ffe7024b00e..79413c34eac 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -499,27 +499,49 @@ class SessionSlot extends Phaser.GameObjects.Container { this.add(this.loadingLabel); } - decideFallback(data: SessionSaveData) { - let fallbackName; + /** + * Generates a name for sessions that don't have a name yet. + * @param data - The {@linkcode SessionSaveData} being checked + * @returns The default name for the given data. + */ + decideFallback(data: SessionSaveData): string { + let fallbackName = `${GameMode.getModeName(data.gameMode)}`; switch (data.gameMode) { case GameModes.CLASSIC: - fallbackName = `${GameMode.getModeName(data.gameMode)} (${globalScene.gameData.gameStats.classicSessionsPlayed + 1})`; + fallbackName += ` (${globalScene.gameData.gameStats.classicSessionsPlayed + 1})`; break; case GameModes.ENDLESS: case GameModes.SPLICED_ENDLESS: - fallbackName = `${GameMode.getModeName(data.gameMode)} (${globalScene.gameData.gameStats.endlessSessionsPlayed + 1})`; + fallbackName += ` (${globalScene.gameData.gameStats.endlessSessionsPlayed + 1})`; break; case GameModes.DAILY: { const runDay = new Date(data.timestamp).toLocaleDateString(); - fallbackName = `${GameMode.getModeName(data.gameMode)} (${runDay})`; + fallbackName += ` (${runDay})`; break; } - case GameModes.CHALLENGE: - fallbackName = data.challenges - .find(c => c.value !== 0) - ?.toChallenge() - .getName(); + case GameModes.CHALLENGE: { + const activeChallenges = data.challenges.filter(c => c.value !== 0); + if (activeChallenges.length === 0) { + break; + } + + fallbackName = ""; + for (const challenge of activeChallenges.slice(0, 3)) { + if (fallbackName !== "") { + fallbackName += ", "; + } + fallbackName += challenge.toChallenge().getName(); + } + + if (activeChallenges.length > 3) { + fallbackName += ", ..."; + } else if (fallbackName === "") { + // Something went wrong when retrieving the names of the active challenges, + // so fall back to just naming the run "Challenge" + fallbackName = `${GameMode.getModeName(data.gameMode)}`; + } break; + } } return fallbackName; } diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 45dc450abdf..c295cec8207 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -60,7 +60,7 @@ import { addWindow } from "#ui/ui-theme"; import { UnavailableModalUiHandler } from "#ui/unavailable-modal-ui-handler"; import { executeIf } from "#utils/common"; import i18next from "i18next"; -import RenameRunFormUiHandler from "./rename-run-ui-handler"; +import { RenameRunFormUiHandler } from "./rename-run-ui-handler"; const transitionModes = [ UiMode.SAVE_SLOT,