From 5dcbedf364c7b0fedb8d00e8e78b6c83578969c5 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Thu, 11 Sep 2025 01:11:57 +1000 Subject: [PATCH 1/3] Add blacklist of moves that can't be forced STAB. (#6491) * Add blacklist of moves that can't be forced STAB. * Add exploding moves to blacklist. * Change blacklist from array to list. * Sort blacklist and add steel beam --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/field/pokemon.ts | 54 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 44239411a59..dc090dbc2b1 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3209,9 +3209,55 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { Math.ceil(Math.pow(m[1], weightMultiplier) * 100), ]); + const STAB_BLACKLIST: ReadonlySet = new Set([ + MoveId.BEAT_UP, + MoveId.BELCH, + MoveId.BIDE, + MoveId.COMEUPPANCE, + MoveId.COUNTER, + MoveId.DOOM_DESIRE, + MoveId.DRAGON_RAGE, + MoveId.DREAM_EATER, + MoveId.ENDEAVOR, + MoveId.EXPLOSION, + MoveId.FAKE_OUT, + MoveId.FIRST_IMPRESSION, + MoveId.FISSURE, + MoveId.FLING, + MoveId.FOCUS_PUNCH, + MoveId.FUTURE_SIGHT, + MoveId.GUILLOTINE, + MoveId.HOLD_BACK, + MoveId.HORN_DRILL, + MoveId.LAST_RESORT, + MoveId.METAL_BURST, + MoveId.MIRROR_COAT, + MoveId.MISTY_EXPLOSION, + MoveId.NATURAL_GIFT, + MoveId.NATURES_MADNESS, + MoveId.NIGHT_SHADE, + MoveId.PSYWAVE, + MoveId.RUINATION, + MoveId.SELF_DESTRUCT, + MoveId.SHEER_COLD, + MoveId.SHELL_TRAP, + MoveId.SKY_DROP, + MoveId.SNORE, + MoveId.SONIC_BOOM, + MoveId.SPIT_UP, + MoveId.STEEL_BEAM, + MoveId.STEEL_ROLLER, + MoveId.SUPER_FANG, + MoveId.SYNCHRONOISE, + MoveId.UPPER_HAND, + ]); + // All Pokemon force a STAB move first const stabMovePool = baseWeights.filter( - m => allMoves[m[0]].category !== MoveCategory.STATUS && this.isOfType(allMoves[m[0]].type), + m => + allMoves[m[0]].category !== MoveCategory.STATUS + && this.isOfType(allMoves[m[0]].type) + && !STAB_BLACKLIST.has(m[0]), ); if (stabMovePool.length > 0) { @@ -3224,7 +3270,9 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { this.moveset.push(new PokemonMove(stabMovePool[index][0])); } else { // If there are no damaging STAB moves, just force a random damaging move - const attackMovePool = baseWeights.filter(m => allMoves[m[0]].category !== MoveCategory.STATUS); + const attackMovePool = baseWeights.filter( + m => allMoves[m[0]].category !== MoveCategory.STATUS && !STAB_BLACKLIST.has(m[0]), + ); if (attackMovePool.length > 0) { const totalWeight = attackMovePool.reduce((v, m) => v + m[1], 0); let rand = randSeedInt(totalWeight); @@ -3261,7 +3309,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { } else if (allMoves[m[0]].category !== MoveCategory.STATUS) { ret = Math.ceil( (m[1] / Math.max(Math.pow(4, this.moveset.filter(mo => (mo.getMove().power ?? 0) > 1).length) / 8, 0.5)) - * (this.isOfType(allMoves[m[0]].type) ? 20 : 1), + * (this.isOfType(allMoves[m[0]].type) && !STAB_BLACKLIST.has(m[0]) ? 20 : 1), ); } else { ret = m[1]; From 42a87cf22811ae704fef9d948d10437f7d6e070a Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 10 Sep 2025 10:37:23 -0500 Subject: [PATCH 2/3] [UI/UX] In settings, clamp volume cursor at boundary (#6504) * feat(settings): clamp volume cursor at boundary * Extract left/right logic to own method Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --------- Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/system/settings/settings.ts | 14 ++ .../settings/abstract-settings-ui-handler.ts | 179 +++++++++--------- 2 files changed, 106 insertions(+), 87 deletions(-) diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index cf3a5fb0eee..c44f31f0930 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -120,6 +120,14 @@ export interface Setting { default: number; type: SettingType; requireReload?: boolean; + /** + * Specifies the behavior when navigating left/right at the boundaries of the option + * + * - `true`: the cursor will stay on the boundary instead of moving + * - `false`: the cursor will wrap to the other end of the options list + * @defaultValue `false` + */ + clamp?: boolean; /** Whether the setting can be activated or not */ activatable?: boolean; /** Determines whether the setting should be hidden from the UI */ @@ -230,6 +238,7 @@ export const Setting: Array = [ ], default: 3, type: SettingType.GENERAL, + clamp: false, }, { key: SettingKeys.HP_Bar_Speed, @@ -639,6 +648,7 @@ export const Setting: Array = [ options: VOLUME_OPTIONS, default: 5, type: SettingType.AUDIO, + clamp: true, }, { key: SettingKeys.BGM_Volume, @@ -646,6 +656,7 @@ export const Setting: Array = [ options: VOLUME_OPTIONS, default: 10, type: SettingType.AUDIO, + clamp: true, }, { key: SettingKeys.Field_Volume, @@ -653,6 +664,7 @@ export const Setting: Array = [ options: VOLUME_OPTIONS, default: 10, type: SettingType.AUDIO, + clamp: true, }, { key: SettingKeys.SE_Volume, @@ -660,6 +672,7 @@ export const Setting: Array = [ options: VOLUME_OPTIONS, default: 10, type: SettingType.AUDIO, + clamp: true, }, { key: SettingKeys.UI_Volume, @@ -667,6 +680,7 @@ export const Setting: Array = [ options: VOLUME_OPTIONS, default: 10, type: SettingType.AUDIO, + clamp: true, }, { key: SettingKeys.Battle_Music, diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index ef117fb6a34..876c18eb697 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -4,6 +4,7 @@ import { TextStyle } from "#enums/text-style"; import { UiMode } from "#enums/ui-mode"; import type { SettingType } from "#system/settings"; import { Setting, SettingKeys } from "#system/settings"; +import type { AnyFn } from "#types/type-helpers"; import type { InputsIcons } from "#ui/abstract-control-settings-ui-handler"; import { ScrollBar } from "#ui/containers/scroll-bar"; import { MessageUiHandler } from "#ui/handlers/message-ui-handler"; @@ -53,54 +54,47 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { */ setup() { const ui = this.getUi(); + const canvasWidth = globalScene.scaledCanvas.width; + const canvasHeight = globalScene.scaledCanvas.height; - this.settingsContainer = globalScene.add.container(1, -globalScene.scaledCanvas.height + 1); - this.settingsContainer.setName(`settings-${this.title}`); - this.settingsContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.scaledCanvas.width, globalScene.scaledCanvas.height - 20), - Phaser.Geom.Rectangle.Contains, - ); + this.settingsContainer = globalScene.add + .container(1, -canvasHeight + 1) + .setName(`settings-${this.title}`) + .setInteractive(new Phaser.Geom.Rectangle(0, 0, canvasWidth, canvasHeight - 20), Phaser.Geom.Rectangle.Contains); this.navigationIcons = {}; this.navigationContainer = new NavigationMenu(0, 0); + const navWidth = this.navigationContainer.width; + const navHeight = this.navigationContainer.height; - this.optionsBg = addWindow( - 0, - this.navigationContainer.height, - globalScene.scaledCanvas.width - 2, - globalScene.scaledCanvas.height - 16 - this.navigationContainer.height - 2, - ); - this.optionsBg.setName("window-options-bg"); - this.optionsBg.setOrigin(0, 0); + this.optionsBg = addWindow(0, navHeight, canvasWidth - 2, canvasHeight - 16 - navHeight - 2) + .setName("window-options-bg") + .setOrigin(0); - const actionsBg = addWindow( - 0, - globalScene.scaledCanvas.height - this.navigationContainer.height, - globalScene.scaledCanvas.width - 2, - 22, - ); - actionsBg.setOrigin(0, 0); + const actionsBg = addWindow(0, canvasHeight - navHeight, canvasWidth - 2, 22) // formatting + .setOrigin(0); - const iconAction = globalScene.add.sprite(0, 0, "keyboard"); - iconAction.setOrigin(0, -0.1); - iconAction.setPositionRelative(actionsBg, this.navigationContainer.width - 32, 4); + const iconAction = globalScene.add + .sprite(0, 0, "keyboard") + .setOrigin(0, -0.1) + .setPositionRelative(actionsBg, navWidth - 32, 4); this.navigationIcons["BUTTON_ACTION"] = iconAction; - const actionText = addTextObject(0, 0, i18next.t("settings:action"), TextStyle.SETTINGS_LABEL); - actionText.setOrigin(0, 0.15); + const actionText = addTextObject(0, 0, i18next.t("settings:action"), TextStyle.SETTINGS_LABEL).setOrigin(0, 0.15); actionText.setPositionRelative(iconAction, -actionText.width / 6 - 2, 0); - const iconCancel = globalScene.add.sprite(0, 0, "keyboard"); - iconCancel.setOrigin(0, -0.1); - iconCancel.setPositionRelative(actionsBg, actionText.x - 28, 4); + const iconCancel = globalScene.add + .sprite(0, 0, "keyboard") + .setOrigin(0, -0.1) + .setPositionRelative(actionsBg, actionText.x - 28, 4); this.navigationIcons["BUTTON_CANCEL"] = iconCancel; - const cancelText = addTextObject(0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); - cancelText.setOrigin(0, 0.15); + const cancelText = addTextObject(0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL) // formatting + .setOrigin(0, 0.15); cancelText.setPositionRelative(iconCancel, -cancelText.width / 6 - 2, 0); - this.optionsContainer = globalScene.add.container(0, 0); + this.optionsContainer = globalScene.add.container(); this.settingLabels = []; this.optionValueLabels = []; @@ -113,8 +107,7 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { anyReloadRequired = true; } - this.settingLabels[s] = addTextObject(8, 28 + s * 16, settingName, TextStyle.SETTINGS_LABEL); - this.settingLabels[s].setOrigin(0, 0); + this.settingLabels[s] = addTextObject(8, 28 + s * 16, settingName, TextStyle.SETTINGS_LABEL).setOrigin(0); this.optionsContainer.add(this.settingLabels[s]); this.optionValueLabels.push( @@ -125,7 +118,7 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { option.label, setting.default === o ? TextStyle.SETTINGS_SELECTED : TextStyle.SETTINGS_VALUE, ); - valueLabel.setOrigin(0, 0); + valueLabel.setOrigin(0); this.optionsContainer.add(valueLabel); @@ -160,32 +153,33 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { this.scrollBar.setTotalRows(this.settings.length); // Two-lines message box - this.messageBoxContainer = globalScene.add.container(0, globalScene.scaledCanvas.height); - this.messageBoxContainer.setName("settings-message-box"); - this.messageBoxContainer.setVisible(false); + this.messageBoxContainer = globalScene.add + .container(0, globalScene.scaledCanvas.height) + .setName("settings-message-box") + .setVisible(false); const settingsMessageBox = addWindow(0, -1, globalScene.scaledCanvas.width - 2, 48); settingsMessageBox.setOrigin(0, 1); this.messageBoxContainer.add(settingsMessageBox); - const messageText = addTextObject(8, -40, "", TextStyle.WINDOW, { - maxLines: 2, - }); - messageText.setWordWrapWidth(globalScene.game.canvas.width - 60); - messageText.setName("settings-message"); - messageText.setOrigin(0, 0); + const messageText = addTextObject(8, -40, "", TextStyle.WINDOW, { maxLines: 2 }) + .setWordWrapWidth(globalScene.game.canvas.width - 60) + .setName("settings-message") + .setOrigin(0); this.messageBoxContainer.add(messageText); this.message = messageText; - this.settingsContainer.add(this.optionsBg); - this.settingsContainer.add(this.scrollBar); - this.settingsContainer.add(this.navigationContainer); - this.settingsContainer.add(actionsBg); - this.settingsContainer.add(this.optionsContainer); - this.settingsContainer.add(iconAction); - this.settingsContainer.add(iconCancel); - this.settingsContainer.add(actionText); + this.settingsContainer.add([ + this.optionsBg, + this.scrollBar, + this.navigationContainer, + actionsBg, + this.optionsContainer, + iconAction, + iconCancel, + actionText, + ]); // Only add the ReloadRequired text on pages that have settings that require a reload. if (anyReloadRequired) { const reloadRequired = addTextObject(0, 0, `*${i18next.t("settings:requireReload")}`, TextStyle.SETTINGS_LABEL) @@ -194,8 +188,7 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { .setY(actionText.y); this.settingsContainer.add(reloadRequired); } - this.settingsContainer.add(cancelText); - this.settingsContainer.add(this.messageBoxContainer); + this.settingsContainer.add([cancelText, this.messageBoxContainer]); ui.add(this.settingsContainer); @@ -210,17 +203,13 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { updateBindings(): void { for (const settingName of Object.keys(this.navigationIcons)) { if (settingName === "BUTTON_HOME") { - this.navigationIcons[settingName].setTexture("keyboard"); - this.navigationIcons[settingName].setFrame("HOME.png"); - this.navigationIcons[settingName].alpha = 1; + this.navigationIcons[settingName].setTexture("keyboard").setFrame("HOME.png").alpha = 1; continue; } const icon = globalScene.inputController?.getIconForLatestInputRecorded(settingName); if (icon) { const type = globalScene.inputController?.getLastSourceType(); - this.navigationIcons[settingName].setTexture(type); - this.navigationIcons[settingName].setFrame(icon); - this.navigationIcons[settingName].alpha = 1; + this.navigationIcons[settingName].setTexture(type).setFrame(icon).alpha = 1; } else { this.navigationIcons[settingName].alpha = 0; } @@ -242,21 +231,43 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { ? JSON.parse(localStorage.getItem(this.localStorageKey)!) : {}; // TODO: is this bang correct? - this.settings.forEach((setting, s) => - this.setOptionCursor(s, settings.hasOwnProperty(setting.key) ? settings[setting.key] : this.settings[s].default), - ); + this.settings.forEach((setting, s) => { + this.setOptionCursor(s, settings.hasOwnProperty(setting.key) ? settings[setting.key] : this.settings[s].default); + }); this.settingsContainer.setVisible(true); this.setCursor(0); this.setScrollCursor(0); - this.getUi().moveTo(this.settingsContainer, this.getUi().length - 1); + const ui = this.getUi(); - this.getUi().hideTooltip(); + ui.moveTo(this.settingsContainer, ui.length - 1); + + ui.hideTooltip(); return true; } + /** + * Submethod of {@linkcode processInput} to handle left/right input for changing option values + * + * @remarks + * If the cursor is positioned on a boundary option, will apply clamping / wrapping as appropriate + * @param cursor - Current cursor position in the settings menu + * @param dir - Direction to pan when scrolling, -1 for left, 1 for right + * @returns `true` if the action associated with the button was successfully processed, `false` otherwise. + */ + private processLeftRightInput(cursor: number, dir: -1 | 1): boolean { + let boundaryAction = Phaser.Math.Wrap; + let upperBound = this.optionValueLabels[cursor].length; + if (this.settings[cursor]?.clamp) { + boundaryAction = Phaser.Math.Clamp; + // clamping is right inclusive; wrapping isn't + upperBound -= 1; + } + return this.setOptionCursor(cursor, boundaryAction(this.optionCursors[cursor] + dir, 0, upperBound), true); + } + /** * Processes input from a specified button. * This method handles navigation through a UI menu, including movement through menu items @@ -314,20 +325,10 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { } break; case Button.LEFT: - // Cycle to the rightmost position when at the leftmost, otherwise move left - success = this.setOptionCursor( - cursor, - Phaser.Math.Wrap(this.optionCursors[cursor] - 1, 0, this.optionValueLabels[cursor].length), - true, - ); + success = this.processLeftRightInput(cursor, -1); break; case Button.RIGHT: - // Cycle to the leftmost position when at the rightmost, otherwise move right - success = this.setOptionCursor( - cursor, - Phaser.Math.Wrap(this.optionCursors[cursor] + 1, 0, this.optionValueLabels[cursor].length), - true, - ); + success = this.processLeftRightInput(cursor, 1); break; case Button.CYCLE_FORM: case Button.CYCLE_SHINY: @@ -376,8 +377,9 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { if (!this.cursorObj) { const cursorWidth = globalScene.scaledCanvas.width - (this.scrollBar.visible ? 16 : 10); - this.cursorObj = globalScene.add.nineslice(0, 0, "summary_moves_cursor", undefined, cursorWidth, 16, 1, 1, 1, 1); - this.cursorObj.setOrigin(0, 0); + this.cursorObj = globalScene.add + .nineslice(0, 0, "summary_moves_cursor", undefined, cursorWidth, 16, 1, 1, 1, 1) + .setOrigin(0); this.optionsContainer.add(this.cursorObj); } @@ -399,18 +401,21 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { settingIndex = this.cursor + this.scrollCursor; } const setting = this.settings[settingIndex]; - const lastCursor = this.optionCursors[settingIndex]; + // do nothing if the option isn't changing + if (cursor === lastCursor) { + return false; + } - const lastValueLabel = this.optionValueLabels[settingIndex][lastCursor]; - lastValueLabel.setColor(getTextColor(TextStyle.SETTINGS_VALUE)); - lastValueLabel.setShadowColor(getTextColor(TextStyle.SETTINGS_VALUE, true)); + this.optionValueLabels[settingIndex][lastCursor] + .setColor(getTextColor(TextStyle.SETTINGS_VALUE)) + .setShadowColor(getTextColor(TextStyle.SETTINGS_VALUE, true)); this.optionCursors[settingIndex] = cursor; - const newValueLabel = this.optionValueLabels[settingIndex][cursor]; - newValueLabel.setColor(getTextColor(TextStyle.SETTINGS_SELECTED)); - newValueLabel.setShadowColor(getTextColor(TextStyle.SETTINGS_SELECTED, true)); + this.optionValueLabels[settingIndex][cursor] + .setColor(getTextColor(TextStyle.SETTINGS_SELECTED)) + .setShadowColor(getTextColor(TextStyle.SETTINGS_SELECTED, true)); if (save) { const saveSetting = () => { @@ -511,7 +516,7 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { override showText( text: string, delay?: number, - callback?: Function, + callback?: AnyFn, callbackDelay?: number, prompt?: boolean, promptDelay?: number, From 6f3f6026a89f45bc632a25f5c557870e9aa0bef6 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Wed, 10 Sep 2025 17:42:38 +0200 Subject: [PATCH 3/3] [UI/UX][Refactor] Moved and renamed some ui files (#6538) * Moved and renamed some ui files * Renamed two handlers to helpers --- src/phases/egg-hatch-phase.ts | 6 +++--- src/phases/evolution-phase.ts | 6 +++--- src/phases/learn-move-phase.ts | 4 ++-- src/ui-inputs.ts | 2 +- src/ui/containers/egg-counter-container.ts | 4 ++-- src/ui/containers/hatched-pokemon-container.ts | 8 ++++---- src/ui/containers/saving-icon-handler.ts | 2 +- ...-handler.ts => egg-hatch-scene-ui-handler.ts} | 2 +- src/ui/handlers/egg-list-ui-handler.ts | 12 ++++++------ src/ui/handlers/egg-summary-ui-handler.ts | 12 ++++++------ ...-handler.ts => evolution-scene-ui-handler.ts} | 2 +- src/ui/handlers/party-ui-handler.ts | 10 +++++----- .../pokedex-page-ui-handler.ts | 0 src/ui/handlers/pokedex-ui-handler.ts | 6 +++--- src/ui/handlers/starter-select-ui-handler.ts | 6 +++--- src/ui/ui.ts | 16 ++++++++-------- .../pokemon-icon-anim-helper.ts} | 2 +- .../scrollable-grid-helper.ts} | 8 ++++---- test/ui/pokedex.test.ts | 2 +- 19 files changed, 55 insertions(+), 55 deletions(-) rename src/ui/handlers/{egg-hatch-scene-handler.ts => egg-hatch-scene-ui-handler.ts} (96%) rename src/ui/handlers/{evolution-scene-handler.ts => evolution-scene-ui-handler.ts} (97%) rename src/ui/{containers => handlers}/pokedex-page-ui-handler.ts (100%) rename src/ui/{handlers/pokemon-icon-anim-handler.ts => utils/pokemon-icon-anim-helper.ts} (98%) rename src/ui/{handlers/scrollable-grid-handler.ts => utils/scrollable-grid-helper.ts} (97%) diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 68c60abc0dc..bfd66bd02e4 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -11,7 +11,7 @@ import type { EggLapsePhase } from "#phases/egg-lapse-phase"; import { achvs } from "#system/achv"; import { EggCounterContainer } from "#ui/containers/egg-counter-container"; import { PokemonInfoContainer } from "#ui/containers/pokemon-info-container"; -import type { EggHatchSceneHandler } from "#ui/handlers/egg-hatch-scene-handler"; +import type { EggHatchSceneUiHandler } from "#ui/handlers/egg-hatch-scene-ui-handler"; import { fixedInt, getFrameMs, randInt } from "#utils/common"; import i18next from "i18next"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; @@ -32,7 +32,7 @@ export class EggHatchPhase extends Phase { private eggCounterContainer: EggCounterContainer; /** The scene handler for egg hatching */ - private eggHatchHandler: EggHatchSceneHandler; + private eggHatchHandler: EggHatchSceneUiHandler; /** The phaser gameobject container that holds everything */ private eggHatchContainer: Phaser.GameObjects.Container; /** The phaser image that is the background */ @@ -92,7 +92,7 @@ export class EggHatchPhase extends Phase { globalScene.fadeOutBgm(undefined, false); - this.eggHatchHandler = globalScene.ui.getHandler() as EggHatchSceneHandler; + this.eggHatchHandler = globalScene.ui.getHandler() as EggHatchSceneUiHandler; this.eggHatchContainer = this.eggHatchHandler.eggHatchContainer; diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 7d7301bbeca..5943ed730ff 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -10,7 +10,7 @@ import { LearnMoveSituation } from "#enums/learn-move-situation"; import { UiMode } from "#enums/ui-mode"; import { cos, sin } from "#field/anims"; import type { PlayerPokemon, Pokemon } from "#field/pokemon"; -import type { EvolutionSceneHandler } from "#ui/handlers/evolution-scene-handler"; +import type { EvolutionSceneUiHandler } from "#ui/handlers/evolution-scene-ui-handler"; import { fixedInt, getFrameMs, randInt } from "#utils/common"; import i18next from "i18next"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; @@ -29,7 +29,7 @@ export class EvolutionPhase extends Phase { private evolution: SpeciesFormEvolution | null; private fusionSpeciesEvolved: boolean; // Whether the evolution is of the fused species private evolutionBgm: AnySound | null; - private evolutionHandler: EvolutionSceneHandler; + private evolutionHandler: EvolutionSceneUiHandler; /** Container for all assets used by the scene. When the scene is cleared, the children within this are destroyed. */ protected evolutionContainer: Phaser.GameObjects.Container; @@ -79,7 +79,7 @@ export class EvolutionPhase extends Phase { * */ private setupEvolutionAssets(): void { - this.evolutionHandler = globalScene.ui.getHandler() as EvolutionSceneHandler; + this.evolutionHandler = globalScene.ui.getHandler() as EvolutionSceneUiHandler; this.evolutionContainer = this.evolutionHandler.evolutionContainer; this.evolutionBaseBg = globalScene.add.image(0, 0, "default_bg").setOrigin(0); diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index a16e12ba058..e75d7c8f6f3 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -10,7 +10,7 @@ import { UiMode } from "#enums/ui-mode"; import type { Pokemon } from "#field/pokemon"; import type { Move } from "#moves/move"; import { PlayerPartyMemberPokemonPhase } from "#phases/player-party-member-pokemon-phase"; -import { EvolutionSceneHandler } from "#ui/handlers/evolution-scene-handler"; +import { EvolutionSceneUiHandler } from "#ui/handlers/evolution-scene-ui-handler"; import { SummaryUiMode } from "#ui/handlers/summary-ui-handler"; import i18next from "i18next"; @@ -47,7 +47,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { } this.messageMode = - globalScene.ui.getHandler() instanceof EvolutionSceneHandler ? UiMode.EVOLUTION_SCENE : UiMode.MESSAGE; + globalScene.ui.getHandler() instanceof EvolutionSceneUiHandler ? UiMode.EVOLUTION_SCENE : UiMode.MESSAGE; globalScene.ui.setMode(this.messageMode); // If the Pokemon has less than 4 moves, the new move is added to the largest empty moveset index // If it has 4 moves, the phase then checks if the player wants to replace the move itself. diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts index 34a08db8fbc..5c4a530b39a 100644 --- a/src/ui-inputs.ts +++ b/src/ui-inputs.ts @@ -3,8 +3,8 @@ import type { InputsController } from "#app/inputs-controller"; import { Button } from "#enums/buttons"; import { UiMode } from "#enums/ui-mode"; import { Setting, SettingKeys, settingIndex } from "#system/settings"; -import { PokedexPageUiHandler } from "#ui/containers/pokedex-page-ui-handler"; import type { MessageUiHandler } from "#ui/handlers/message-ui-handler"; +import { PokedexPageUiHandler } from "#ui/handlers/pokedex-page-ui-handler"; import { PokedexUiHandler } from "#ui/handlers/pokedex-ui-handler"; import { RunInfoUiHandler } from "#ui/handlers/run-info-ui-handler"; import { StarterSelectUiHandler } from "#ui/handlers/starter-select-ui-handler"; diff --git a/src/ui/containers/egg-counter-container.ts b/src/ui/containers/egg-counter-container.ts index 811b6b3bc3a..7bf748c75cd 100644 --- a/src/ui/containers/egg-counter-container.ts +++ b/src/ui/containers/egg-counter-container.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { TextStyle } from "#enums/text-style"; import type { EggCountChangedEvent } from "#events/egg"; import { EggEventType } from "#events/egg"; -import type { EggHatchSceneHandler } from "#ui/handlers/egg-hatch-scene-handler"; +import type { EggHatchSceneUiHandler } from "#ui/handlers/egg-hatch-scene-ui-handler"; import { addTextObject } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; @@ -27,7 +27,7 @@ export class EggCounterContainer extends Phaser.GameObjects.Container { super(globalScene, 0, 0); this.eggCount = eggCount; - const uiHandler = globalScene.ui.getHandler() as EggHatchSceneHandler; + const uiHandler = globalScene.ui.getHandler() as EggHatchSceneUiHandler; uiHandler.eventTarget.addEventListener(EggEventType.EGG_COUNT_CHANGED, this.onEggCountChangedEvent); this.setup(); diff --git a/src/ui/containers/hatched-pokemon-container.ts b/src/ui/containers/hatched-pokemon-container.ts index 4ed67477a3f..456ffd923a1 100644 --- a/src/ui/containers/hatched-pokemon-container.ts +++ b/src/ui/containers/hatched-pokemon-container.ts @@ -4,8 +4,8 @@ import { Gender } from "#data/gender"; import type { PokemonSpecies } from "#data/pokemon-species"; import { DexAttr } from "#enums/dex-attr"; import { getVariantTint } from "#sprites/variant"; -import type { PokemonIconAnimHandler } from "#ui/handlers/pokemon-icon-anim-handler"; -import { PokemonIconAnimMode } from "#ui/handlers/pokemon-icon-anim-handler"; +import type { PokemonIconAnimHelper } from "#ui/utils/pokemon-icon-anim-helper"; +import { PokemonIconAnimMode } from "#ui/utils/pokemon-icon-anim-helper"; /** * A container for a Pokemon's sprite and icons to get displayed in the egg summary screen @@ -81,9 +81,9 @@ export class HatchedPokemonContainer extends Phaser.GameObjects.Container { * Animates the pokemon icon if it has a new form or shiny variant * * @param hatchData the {@linkcode EggHatchData} to base the icons on - * @param iconAnimHandler the {@linkcode PokemonIconAnimHandler} to use to animate the sprites + * @param iconAnimHandler the {@linkcode PokemonIconAnimHelper} to use to animate the sprites */ - updateAndAnimate(hatchData: EggHatchData, iconAnimHandler: PokemonIconAnimHandler) { + updateAndAnimate(hatchData: EggHatchData, iconAnimHandler: PokemonIconAnimHelper) { const displayPokemon = hatchData.pokemon; this.species = displayPokemon.species; diff --git a/src/ui/containers/saving-icon-handler.ts b/src/ui/containers/saving-icon-handler.ts index 00c8b8b526c..aad37bca97f 100644 --- a/src/ui/containers/saving-icon-handler.ts +++ b/src/ui/containers/saving-icon-handler.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { fixedInt } from "#utils/common"; -export class SavingIconHandler extends Phaser.GameObjects.Container { +export class SavingIconContainer extends Phaser.GameObjects.Container { private icon: Phaser.GameObjects.Sprite; private animActive: boolean; diff --git a/src/ui/handlers/egg-hatch-scene-handler.ts b/src/ui/handlers/egg-hatch-scene-ui-handler.ts similarity index 96% rename from src/ui/handlers/egg-hatch-scene-handler.ts rename to src/ui/handlers/egg-hatch-scene-ui-handler.ts index b7b5b78641f..2fff9980de3 100644 --- a/src/ui/handlers/egg-hatch-scene-handler.ts +++ b/src/ui/handlers/egg-hatch-scene-ui-handler.ts @@ -3,7 +3,7 @@ import { Button } from "#enums/buttons"; import { UiMode } from "#enums/ui-mode"; import { UiHandler } from "#ui/handlers/ui-handler"; -export class EggHatchSceneHandler extends UiHandler { +export class EggHatchSceneUiHandler extends UiHandler { public eggHatchContainer: Phaser.GameObjects.Container; /** diff --git a/src/ui/handlers/egg-list-ui-handler.ts b/src/ui/handlers/egg-list-ui-handler.ts index 2161073e6b1..e4d1d5b10e9 100644 --- a/src/ui/handlers/egg-list-ui-handler.ts +++ b/src/ui/handlers/egg-list-ui-handler.ts @@ -4,10 +4,10 @@ import { TextStyle } from "#enums/text-style"; import { UiMode } from "#enums/ui-mode"; import { ScrollBar } from "#ui/containers/scroll-bar"; import { MessageUiHandler } from "#ui/handlers/message-ui-handler"; -import { PokemonIconAnimHandler, PokemonIconAnimMode } from "#ui/handlers/pokemon-icon-anim-handler"; -import { ScrollableGridUiHandler } from "#ui/handlers/scrollable-grid-handler"; import { addTextObject } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; +import { PokemonIconAnimHelper, PokemonIconAnimMode } from "#ui/utils/pokemon-icon-anim-helper"; +import { ScrollableGridHelper } from "#ui/utils/scrollable-grid-helper"; import i18next from "i18next"; export class EggListUiHandler extends MessageUiHandler { @@ -25,9 +25,9 @@ export class EggListUiHandler extends MessageUiHandler { private eggListMessageBoxContainer: Phaser.GameObjects.Container; private cursorObj: Phaser.GameObjects.Image; - private scrollGridHandler: ScrollableGridUiHandler; + private scrollGridHandler: ScrollableGridHelper; - private iconAnimHandler: PokemonIconAnimHandler; + private iconAnimHandler: PokemonIconAnimHelper; constructor() { super(UiMode.EGG_LIST); @@ -45,7 +45,7 @@ export class EggListUiHandler extends MessageUiHandler { const eggListBg = globalScene.add.image(0, 0, "egg_list_bg").setOrigin(0); - this.iconAnimHandler = new PokemonIconAnimHandler(); + this.iconAnimHandler = new PokemonIconAnimHelper(); this.iconAnimHandler.setup(); this.eggNameText = addTextObject(8, 68, "", TextStyle.SUMMARY).setOrigin(0); @@ -64,7 +64,7 @@ export class EggListUiHandler extends MessageUiHandler { const scrollBar = new ScrollBar(310, 5, 4, 170, this.ROWS); - this.scrollGridHandler = new ScrollableGridUiHandler(this, this.ROWS, this.COLUMNS) + this.scrollGridHandler = new ScrollableGridHelper(this, this.ROWS, this.COLUMNS) .withScrollBar(scrollBar) .withUpdateGridCallBack(() => this.updateEggIcons()) .withUpdateSingleElementCallback((i: number) => this.setEggDetails(i)); diff --git a/src/ui/handlers/egg-summary-ui-handler.ts b/src/ui/handlers/egg-summary-ui-handler.ts index 046f3b80ea4..1097615d83d 100644 --- a/src/ui/handlers/egg-summary-ui-handler.ts +++ b/src/ui/handlers/egg-summary-ui-handler.ts @@ -7,8 +7,8 @@ import { HatchedPokemonContainer } from "#ui/containers/hatched-pokemon-containe import { PokemonHatchInfoContainer } from "#ui/containers/pokemon-hatch-info-container"; import { ScrollBar } from "#ui/containers/scroll-bar"; import { MessageUiHandler } from "#ui/handlers/message-ui-handler"; -import { PokemonIconAnimHandler, PokemonIconAnimMode } from "#ui/handlers/pokemon-icon-anim-handler"; -import { ScrollableGridUiHandler } from "#ui/handlers/scrollable-grid-handler"; +import { PokemonIconAnimHelper, PokemonIconAnimMode } from "#ui/utils/pokemon-icon-anim-helper"; +import { ScrollableGridHelper } from "#ui/utils/scrollable-grid-helper"; const iconContainerX = 112; const iconContainerY = 9; @@ -34,11 +34,11 @@ export class EggSummaryUiHandler extends MessageUiHandler { /** hatch info container that displays the current pokemon / hatch (main element on left hand side) */ private infoContainer: PokemonHatchInfoContainer; /** handles jumping animations for the pokemon sprite icons */ - private iconAnimHandler: PokemonIconAnimHandler; + private iconAnimHandler: PokemonIconAnimHelper; private eggHatchBg: Phaser.GameObjects.Image; private eggHatchData: EggHatchData[]; - private scrollGridHandler: ScrollableGridUiHandler; + private scrollGridHandler: ScrollableGridHelper; private cursorObj: Phaser.GameObjects.Image; /** used to add a delay before which it is not possible to exit the summary */ @@ -67,7 +67,7 @@ export class EggSummaryUiHandler extends MessageUiHandler { this.eggHatchContainer.setVisible(false); ui.add(this.eggHatchContainer); - this.iconAnimHandler = new PokemonIconAnimHandler(); + this.iconAnimHandler = new PokemonIconAnimHelper(); this.iconAnimHandler.setup(); this.eggHatchBg = globalScene.add.image(0, 0, "egg_summary_bg"); @@ -97,7 +97,7 @@ export class EggSummaryUiHandler extends MessageUiHandler { ); this.summaryContainer.add(scrollBar); - this.scrollGridHandler = new ScrollableGridUiHandler(this, numRows, numCols) + this.scrollGridHandler = new ScrollableGridHelper(this, numRows, numCols) .withScrollBar(scrollBar) .withUpdateGridCallBack(() => this.updatePokemonIcons()) .withUpdateSingleElementCallback((i: number) => this.infoContainer.showHatchInfo(this.eggHatchData[i])); diff --git a/src/ui/handlers/evolution-scene-handler.ts b/src/ui/handlers/evolution-scene-ui-handler.ts similarity index 97% rename from src/ui/handlers/evolution-scene-handler.ts rename to src/ui/handlers/evolution-scene-ui-handler.ts index 55405d8f437..a1783544a07 100644 --- a/src/ui/handlers/evolution-scene-handler.ts +++ b/src/ui/handlers/evolution-scene-ui-handler.ts @@ -5,7 +5,7 @@ import { UiMode } from "#enums/ui-mode"; import { MessageUiHandler } from "#ui/handlers/message-ui-handler"; import { addTextObject } from "#ui/text"; -export class EvolutionSceneHandler extends MessageUiHandler { +export class EvolutionSceneUiHandler extends MessageUiHandler { public evolutionContainer: Phaser.GameObjects.Container; public messageBg: Phaser.GameObjects.Image; public messageContainer: Phaser.GameObjects.Container; diff --git a/src/ui/handlers/party-ui-handler.ts b/src/ui/handlers/party-ui-handler.ts index ef5ed099153..cc2bb093b07 100644 --- a/src/ui/handlers/party-ui-handler.ts +++ b/src/ui/handlers/party-ui-handler.ts @@ -23,9 +23,9 @@ import { getVariantTint } from "#sprites/variant"; import type { TurnMove } from "#types/turn-move"; import { MoveInfoOverlay } from "#ui/containers/move-info-overlay"; import { MessageUiHandler } from "#ui/handlers/message-ui-handler"; -import { PokemonIconAnimHandler, PokemonIconAnimMode } from "#ui/handlers/pokemon-icon-anim-handler"; import { addBBCodeTextObject, addTextObject, getTextColor } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; +import { PokemonIconAnimHelper, PokemonIconAnimMode } from "#ui/utils/pokemon-icon-anim-helper"; import { applyChallenges } from "#utils/challenge-utils"; import { BooleanHolder, getLocalizedSpriteKey, randInt } from "#utils/common"; import { toCamelCase, toTitleCase } from "#utils/strings"; @@ -201,7 +201,7 @@ export class PartyUiHandler extends MessageUiHandler { private tmMoveId: MoveId; private showMovePp: boolean; - private iconAnimHandler: PokemonIconAnimHandler; + private iconAnimHandler: PokemonIconAnimHelper; private blockInput: boolean; @@ -320,7 +320,7 @@ export class PartyUiHandler extends MessageUiHandler { this.optionsContainer = globalScene.add.container(globalScene.scaledCanvas.width - 1, -1); partyContainer.add(this.optionsContainer); - this.iconAnimHandler = new PokemonIconAnimHandler(); + this.iconAnimHandler = new PokemonIconAnimHelper(); this.iconAnimHandler.setup(); const partyDiscardModeButton = new PartyDiscardModeButton(DISCARD_BUTTON_X, DISCARD_BUTTON_Y, this); @@ -1892,12 +1892,12 @@ class PartySlot extends Phaser.GameObjects.Container { private slotBgKey: string; private pokemonIcon: Phaser.GameObjects.Container; - private iconAnimHandler: PokemonIconAnimHandler; + private iconAnimHandler: PokemonIconAnimHelper; constructor( slotIndex: number, pokemon: PlayerPokemon, - iconAnimHandler: PokemonIconAnimHandler, + iconAnimHandler: PokemonIconAnimHelper, partyUiMode: PartyUiMode, tmMoveId: MoveId, ) { diff --git a/src/ui/containers/pokedex-page-ui-handler.ts b/src/ui/handlers/pokedex-page-ui-handler.ts similarity index 100% rename from src/ui/containers/pokedex-page-ui-handler.ts rename to src/ui/handlers/pokedex-page-ui-handler.ts diff --git a/src/ui/handlers/pokedex-ui-handler.ts b/src/ui/handlers/pokedex-ui-handler.ts index 3500fa97436..93663a4090e 100644 --- a/src/ui/handlers/pokedex-ui-handler.ts +++ b/src/ui/handlers/pokedex-ui-handler.ts @@ -48,9 +48,9 @@ import { PokedexMonContainer } from "#ui/containers/pokedex-mon-container"; import { ScrollBar } from "#ui/containers/scroll-bar"; import type { OptionSelectConfig } from "#ui/handlers/abstract-option-select-ui-handler"; import { MessageUiHandler } from "#ui/handlers/message-ui-handler"; -import { PokemonIconAnimHandler, PokemonIconAnimMode } from "#ui/handlers/pokemon-icon-anim-handler"; import { addTextObject, getTextColor } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; +import { PokemonIconAnimHelper, PokemonIconAnimMode } from "#ui/utils/pokemon-icon-anim-helper"; import { BooleanHolder, fixedInt, getLocalizedSpriteKey, padInt, randIntRange, rgbHexToRgba } from "#utils/common"; import type { StarterPreferences } from "#utils/data"; import { loadStarterPreferences } from "#utils/data"; @@ -198,7 +198,7 @@ export class PokedexUiHandler extends MessageUiHandler { public cursorObj: Phaser.GameObjects.Image; private pokerusCursorObjs: Phaser.GameObjects.Image[]; - private iconAnimHandler: PokemonIconAnimHandler; + private iconAnimHandler: PokemonIconAnimHelper; private starterPreferences: StarterPreferences; @@ -482,7 +482,7 @@ export class PokedexUiHandler extends MessageUiHandler { pokemonContainerWindow.setVisible(false); } - this.iconAnimHandler = new PokemonIconAnimHandler(); + this.iconAnimHandler = new PokemonIconAnimHelper(); this.iconAnimHandler.setup(); this.pokemonNumberText = addTextObject(6, 141, "", TextStyle.SUMMARY); diff --git a/src/ui/handlers/starter-select-ui-handler.ts b/src/ui/handlers/starter-select-ui-handler.ts index 60d8a4dc4d6..8556ec385f3 100644 --- a/src/ui/handlers/starter-select-ui-handler.ts +++ b/src/ui/handlers/starter-select-ui-handler.ts @@ -65,9 +65,9 @@ import { StarterContainer } from "#ui/containers/starter-container"; import { StatsContainer } from "#ui/containers/stats-container"; import type { OptionSelectItem } from "#ui/handlers/abstract-option-select-ui-handler"; import { MessageUiHandler } from "#ui/handlers/message-ui-handler"; -import { PokemonIconAnimHandler, PokemonIconAnimMode } from "#ui/handlers/pokemon-icon-anim-handler"; import { addBBCodeTextObject, addTextObject, getTextColor } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; +import { PokemonIconAnimHelper, PokemonIconAnimMode } from "#ui/utils/pokemon-icon-anim-helper"; import { applyChallenges, checkStarterValidForChallenge } from "#utils/challenge-utils"; import { BooleanHolder, @@ -398,7 +398,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { private startCursorObj: Phaser.GameObjects.NineSlice; private randomCursorObj: Phaser.GameObjects.NineSlice; - private iconAnimHandler: PokemonIconAnimHandler; + private iconAnimHandler: PokemonIconAnimHelper; //variables to keep track of the dynamically rendered list of instruction prompts for starter select private instructionRowX = 0; @@ -611,7 +611,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { starterContainerWindow.setVisible(false); } - this.iconAnimHandler = new PokemonIconAnimHandler(); + this.iconAnimHandler = new PokemonIconAnimHelper(); this.iconAnimHandler.setup(); this.pokemonSprite = globalScene.add.sprite(53, 63, "pkmn__sub"); diff --git a/src/ui/ui.ts b/src/ui/ui.ts index a8e4dbe7318..c7d33f66605 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -6,8 +6,7 @@ import { TextStyle } from "#enums/text-style"; import { UiMode } from "#enums/ui-mode"; import { AchvBar } from "#ui/containers/achv-bar"; import type { BgmBar } from "#ui/containers/bgm-bar"; -import { PokedexPageUiHandler } from "#ui/containers/pokedex-page-ui-handler"; -import { SavingIconHandler } from "#ui/containers/saving-icon-handler"; +import { SavingIconContainer } from "#ui/containers/saving-icon-handler"; import { GamepadBindingUiHandler } from "#ui/gamepad-binding-ui-handler"; import { AchvsUiHandler } from "#ui/handlers/achvs-ui-handler"; import { AutoCompleteUiHandler } from "#ui/handlers/autocomplete-ui-handler"; @@ -19,10 +18,10 @@ import { ChangePasswordFormUiHandler } from "#ui/handlers/change-password-form-u import { CommandUiHandler } from "#ui/handlers/command-ui-handler"; import { ConfirmUiHandler } from "#ui/handlers/confirm-ui-handler"; import { EggGachaUiHandler } from "#ui/handlers/egg-gacha-ui-handler"; -import { EggHatchSceneHandler } from "#ui/handlers/egg-hatch-scene-handler"; +import { EggHatchSceneUiHandler } from "#ui/handlers/egg-hatch-scene-ui-handler"; import { EggListUiHandler } from "#ui/handlers/egg-list-ui-handler"; import { EggSummaryUiHandler } from "#ui/handlers/egg-summary-ui-handler"; -import { EvolutionSceneHandler } from "#ui/handlers/evolution-scene-handler"; +import { EvolutionSceneUiHandler } from "#ui/handlers/evolution-scene-ui-handler"; import { FightUiHandler } from "#ui/handlers/fight-ui-handler"; import { GameStatsUiHandler } from "#ui/handlers/game-stats-ui-handler"; import { LoadingModalUiHandler } from "#ui/handlers/loading-modal-ui-handler"; @@ -32,6 +31,7 @@ import { MessageUiHandler } from "#ui/handlers/message-ui-handler"; import { ModifierSelectUiHandler } from "#ui/handlers/modifier-select-ui-handler"; import { MysteryEncounterUiHandler } from "#ui/handlers/mystery-encounter-ui-handler"; import { PartyUiHandler } from "#ui/handlers/party-ui-handler"; +import { PokedexPageUiHandler } from "#ui/handlers/pokedex-page-ui-handler"; import { PokedexScanUiHandler } from "#ui/handlers/pokedex-scan-ui-handler"; import { PokedexUiHandler } from "#ui/handlers/pokedex-ui-handler"; import { RegistrationFormUiHandler } from "#ui/handlers/registration-form-ui-handler"; @@ -115,7 +115,7 @@ export class UI extends Phaser.GameObjects.Container { private overlay: Phaser.GameObjects.Rectangle; public achvBar: AchvBar; public bgmBar: BgmBar; - public savingIcon: SavingIconHandler; + public savingIcon: SavingIconContainer; private tooltipContainer: Phaser.GameObjects.Container; private tooltipBg: Phaser.GameObjects.NineSlice; @@ -141,8 +141,8 @@ export class UI extends Phaser.GameObjects.Container { new PartyUiHandler(), new SummaryUiHandler(), new StarterSelectUiHandler(), - new EvolutionSceneHandler(), - new EggHatchSceneHandler(), + new EvolutionSceneUiHandler(), + new EggHatchSceneUiHandler(), new EggSummaryUiHandler(), new ConfirmUiHandler(), new OptionSelectUiHandler(), @@ -198,7 +198,7 @@ export class UI extends Phaser.GameObjects.Container { globalScene.uiContainer.add(this.achvBar); - this.savingIcon = new SavingIconHandler(); + this.savingIcon = new SavingIconContainer(); this.savingIcon.setup(); globalScene.uiContainer.add(this.savingIcon); diff --git a/src/ui/handlers/pokemon-icon-anim-handler.ts b/src/ui/utils/pokemon-icon-anim-helper.ts similarity index 98% rename from src/ui/handlers/pokemon-icon-anim-handler.ts rename to src/ui/utils/pokemon-icon-anim-helper.ts index 408e0ebc9d3..0d8de7ce1ca 100644 --- a/src/ui/handlers/pokemon-icon-anim-handler.ts +++ b/src/ui/utils/pokemon-icon-anim-helper.ts @@ -9,7 +9,7 @@ export enum PokemonIconAnimMode { type PokemonIcon = Phaser.GameObjects.Container | Phaser.GameObjects.Sprite; -export class PokemonIconAnimHandler { +export class PokemonIconAnimHelper { private icons: Map; private toggled: boolean; diff --git a/src/ui/handlers/scrollable-grid-handler.ts b/src/ui/utils/scrollable-grid-helper.ts similarity index 97% rename from src/ui/handlers/scrollable-grid-handler.ts rename to src/ui/utils/scrollable-grid-helper.ts index 12bbaa32e98..675352ff6fb 100644 --- a/src/ui/handlers/scrollable-grid-handler.ts +++ b/src/ui/utils/scrollable-grid-helper.ts @@ -16,7 +16,7 @@ type UpdateDetailsCallbackFunction = (index: number) => void; * - in `UiHandler.processInput`: call `processNavigationInput` to have it handle the cursor updates while calling the defined callbacks * - in `UiHandler.clear`: call `reset` */ -export class ScrollableGridUiHandler { +export class ScrollableGridHelper { private readonly ROWS: number; private readonly COLUMNS: number; private handler: UiHandler; @@ -47,7 +47,7 @@ export class ScrollableGridUiHandler { * @param scrollBar {@linkcode ScrollBar} * @returns this */ - withScrollBar(scrollBar: ScrollBar): ScrollableGridUiHandler { + withScrollBar(scrollBar: ScrollBar): ScrollableGridHelper { this.scrollBar = scrollBar; this.scrollBar.setTotalRows(Math.ceil(this.totalElements / this.COLUMNS)); return this; @@ -58,7 +58,7 @@ export class ScrollableGridUiHandler { * @param callback {@linkcode UpdateGridCallbackFunction} * @returns this */ - withUpdateGridCallBack(callback: UpdateGridCallbackFunction): ScrollableGridUiHandler { + withUpdateGridCallBack(callback: UpdateGridCallbackFunction): ScrollableGridHelper { this.updateGridCallback = callback; return this; } @@ -68,7 +68,7 @@ export class ScrollableGridUiHandler { * @param callback {@linkcode UpdateDetailsCallbackFunction} * @returns this */ - withUpdateSingleElementCallback(callback: UpdateDetailsCallbackFunction): ScrollableGridUiHandler { + withUpdateSingleElementCallback(callback: UpdateDetailsCallbackFunction): ScrollableGridHelper { this.updateDetailsCallback = callback; return this; } diff --git a/test/ui/pokedex.test.ts b/test/ui/pokedex.test.ts index 47463fa1aab..39ca0bf16d0 100644 --- a/test/ui/pokedex.test.ts +++ b/test/ui/pokedex.test.ts @@ -9,7 +9,7 @@ import { UiMode } from "#enums/ui-mode"; import type { StarterAttributes } from "#system/game-data"; import { GameManager } from "#test/test-utils/game-manager"; import { FilterTextRow } from "#ui/containers/filter-text"; -import { PokedexPageUiHandler } from "#ui/containers/pokedex-page-ui-handler"; +import { PokedexPageUiHandler } from "#ui/handlers/pokedex-page-ui-handler"; import { PokedexUiHandler } from "#ui/handlers/pokedex-ui-handler"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import Phaser from "phaser";