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
This commit is contained in:
NightKev 2025-08-06 22:18:22 -07:00
parent 68d42ba3c8
commit cf70339e36
3 changed files with 34 additions and 12 deletions

View File

@ -3,7 +3,7 @@ import type { InputFieldConfig } from "./form-modal-ui-handler";
import { FormModalUiHandler } from "./form-modal-ui-handler"; import { FormModalUiHandler } from "./form-modal-ui-handler";
import type { ModalConfig } from "./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 { getModalTitle(_config?: ModalConfig): string {
return i18next.t("menu:renamerun"); return i18next.t("menu:renamerun");
} }

View File

@ -499,27 +499,49 @@ class SessionSlot extends Phaser.GameObjects.Container {
this.add(this.loadingLabel); 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) { switch (data.gameMode) {
case GameModes.CLASSIC: case GameModes.CLASSIC:
fallbackName = `${GameMode.getModeName(data.gameMode)} (${globalScene.gameData.gameStats.classicSessionsPlayed + 1})`; fallbackName += ` (${globalScene.gameData.gameStats.classicSessionsPlayed + 1})`;
break; break;
case GameModes.ENDLESS: case GameModes.ENDLESS:
case GameModes.SPLICED_ENDLESS: case GameModes.SPLICED_ENDLESS:
fallbackName = `${GameMode.getModeName(data.gameMode)} (${globalScene.gameData.gameStats.endlessSessionsPlayed + 1})`; fallbackName += ` (${globalScene.gameData.gameStats.endlessSessionsPlayed + 1})`;
break; break;
case GameModes.DAILY: { case GameModes.DAILY: {
const runDay = new Date(data.timestamp).toLocaleDateString(); const runDay = new Date(data.timestamp).toLocaleDateString();
fallbackName = `${GameMode.getModeName(data.gameMode)} (${runDay})`; fallbackName += ` (${runDay})`;
break; break;
} }
case GameModes.CHALLENGE: case GameModes.CHALLENGE: {
fallbackName = data.challenges const activeChallenges = data.challenges.filter(c => c.value !== 0);
.find(c => c.value !== 0) if (activeChallenges.length === 0) {
?.toChallenge() break;
.getName(); }
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; break;
}
} }
return fallbackName; return fallbackName;
} }

View File

@ -60,7 +60,7 @@ import { addWindow } from "#ui/ui-theme";
import { UnavailableModalUiHandler } from "#ui/unavailable-modal-ui-handler"; import { UnavailableModalUiHandler } from "#ui/unavailable-modal-ui-handler";
import { executeIf } from "#utils/common"; import { executeIf } from "#utils/common";
import i18next from "i18next"; import i18next from "i18next";
import RenameRunFormUiHandler from "./rename-run-ui-handler"; import { RenameRunFormUiHandler } from "./rename-run-ui-handler";
const transitionModes = [ const transitionModes = [
UiMode.SAVE_SLOT, UiMode.SAVE_SLOT,