Make flyout exclusive to EnemyBattleInfo

This commit is contained in:
Sirz Benjie 2025-04-23 10:55:03 -05:00
parent 95c7d34009
commit 2687ce2535
No known key found for this signature in database
GPG Key ID: 4A524B4D196C759E
6 changed files with 57 additions and 64 deletions

View File

@ -3349,22 +3349,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return this.battleInfo.updateInfo(this, instant); return this.battleInfo.updateInfo(this, instant);
} }
/**
* Show or hide the type effectiveness multiplier window
* Passing undefined will hide the window
*/
updateEffectiveness(effectiveness?: string) {
this.battleInfo.updateEffectiveness(effectiveness);
}
toggleStats(visible: boolean): void { toggleStats(visible: boolean): void {
this.battleInfo.toggleStats(visible); this.battleInfo.toggleStats(visible);
} }
toggleFlyout(visible: boolean): void {
this.battleInfo.toggleFlyout(visible);
}
/** /**
* Adds experience to this PlayerPokemon, subject to wave based level caps. * Adds experience to this PlayerPokemon, subject to wave based level caps.
* @param exp The amount of experience to add * @param exp The amount of experience to add
@ -6040,6 +6028,7 @@ export class PlayerPokemon extends Pokemon {
} }
export class EnemyPokemon extends Pokemon { export class EnemyPokemon extends Pokemon {
protected battleInfo: EnemyBattleInfo;
public trainerSlot: TrainerSlot; public trainerSlot: TrainerSlot;
public aiType: AiType; public aiType: AiType;
public bossSegments: number; public bossSegments: number;
@ -6711,6 +6700,19 @@ export class EnemyPokemon extends Pokemon {
return ret; return ret;
} }
/**
* Show or hide the type effectiveness multiplier window
* Passing undefined will hide the window
*/
updateEffectiveness(effectiveness?: string) {
this.battleInfo.updateEffectiveness(effectiveness);
}
toggleFlyout(visible: boolean): void {
this.battleInfo.toggleFlyout(visible);
}
} }
/** /**

View File

@ -161,7 +161,7 @@ export class UiInputs {
buttonInfo(pressed = true): void { buttonInfo(pressed = true): void {
if (globalScene.showMovesetFlyout) { if (globalScene.showMovesetFlyout) {
for (const p of globalScene.getField().filter(p => p?.isActive(true))) { for (const p of globalScene.getEnemyField().filter(p => p?.isActive(true))) {
p.toggleFlyout(pressed); p.toggleFlyout(pressed);
} }
} }

View File

@ -1,4 +1,4 @@
import type { default as Pokemon } from "../field/pokemon"; import type { EnemyPokemon, default as Pokemon } from "../field/pokemon";
import { addTextObject, TextStyle } from "./text"; import { addTextObject, TextStyle } from "./text";
import { fixedInt } from "#app/utils/common"; import { fixedInt } from "#app/utils/common";
import { globalScene } from "#app/global-scene"; import { globalScene } from "#app/global-scene";
@ -126,7 +126,7 @@ export default class BattleFlyout extends Phaser.GameObjects.Container {
* Links the given {@linkcode Pokemon} and subscribes to the {@linkcode BattleSceneEventType.MOVE_USED} event * Links the given {@linkcode Pokemon} and subscribes to the {@linkcode BattleSceneEventType.MOVE_USED} event
* @param pokemon {@linkcode Pokemon} to link to this flyout * @param pokemon {@linkcode Pokemon} to link to this flyout
*/ */
initInfo(pokemon: Pokemon) { initInfo(pokemon: EnemyPokemon) {
this.pokemon = pokemon; this.pokemon = pokemon;
this.name = `Flyout ${getPokemonNameWithAffix(this.pokemon)}`; this.name = `Flyout ${getPokemonNameWithAffix(this.pokemon)}`;

View File

@ -9,7 +9,6 @@ import { getTypeRgb } from "#app/data/type";
import { PokemonType } from "#enums/pokemon-type"; import { PokemonType } from "#enums/pokemon-type";
import { getVariantTint } from "#app/sprites/variant"; import { getVariantTint } from "#app/sprites/variant";
import { Stat } from "#enums/stat"; import { Stat } from "#enums/stat";
import type BattleFlyout from "../battle-flyout";
import i18next from "i18next"; import i18next from "i18next";
import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; import { ExpGainsSpeed } from "#app/enums/exp-gains-speed";
@ -55,13 +54,6 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container {
protected type3Icon: Phaser.GameObjects.Sprite; protected type3Icon: Phaser.GameObjects.Sprite;
protected expBar: Phaser.GameObjects.Image; protected expBar: Phaser.GameObjects.Image;
// #region Type effectiveness hint objects
protected effectivenessContainer: Phaser.GameObjects.Container;
protected effectivenessWindow: Phaser.GameObjects.NineSlice;
protected effectivenessText: Phaser.GameObjects.Text;
protected currentEffectiveness?: string;
// #endregion
public expMaskRect: Phaser.GameObjects.Graphics; public expMaskRect: Phaser.GameObjects.Graphics;
protected statsContainer: Phaser.GameObjects.Container; protected statsContainer: Phaser.GameObjects.Container;
@ -69,8 +61,6 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container {
protected statValuesContainer: Phaser.GameObjects.Container; protected statValuesContainer: Phaser.GameObjects.Container;
protected statNumbers: Phaser.GameObjects.Sprite[]; protected statNumbers: Phaser.GameObjects.Sprite[];
public flyoutMenu?: BattleFlyout;
get statOrder(): Stat[] { get statOrder(): Stat[] {
return []; return [];
} }
@ -282,8 +272,6 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container {
this.name = pokemon.getNameToRender(); this.name = pokemon.getNameToRender();
this.box.name = pokemon.getNameToRender(); this.box.name = pokemon.getNameToRender();
this.flyoutMenu?.initInfo(pokemon);
this.genderText.setText(getGenderSymbol(pokemon.gender)); this.genderText.setText(getGenderSymbol(pokemon.gender));
this.genderText.setColor(getGenderColor(pokemon.gender)); this.genderText.setColor(getGenderColor(pokemon.gender));
this.genderText.setPositionRelative(this.nameText, nameTextWidth, 0); this.genderText.setPositionRelative(this.nameText, nameTextWidth, 0);
@ -877,39 +865,6 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container {
}); });
} }
/**
* Request the flyoutMenu to toggle if available and hides or shows the effectiveness window where necessary
*/
toggleFlyout(visible: boolean): void {
this.flyoutMenu?.toggleFlyout(visible);
if (visible) {
this.effectivenessContainer?.setVisible(false);
} else {
this.updateEffectiveness(this.currentEffectiveness);
}
}
/**
* Show or hide the type effectiveness multiplier window
* Passing undefined will hide the window
*/
updateEffectiveness(effectiveness?: string) {
if (this.player) {
return;
}
this.currentEffectiveness = effectiveness;
if (!globalScene.typeHints || effectiveness === undefined || this.flyoutMenu?.flyoutVisible) {
this.effectivenessContainer.setVisible(false);
return;
}
this.effectivenessText.setText(effectiveness);
this.effectivenessWindow.width = 10 + this.effectivenessText.displayWidth;
this.effectivenessContainer.setVisible(true);
}
getBaseY(): number { getBaseY(): number {
return this.baseY; return this.baseY;
} }

View File

@ -4,12 +4,13 @@ import BattleFlyout from "../battle-flyout";
import { addTextObject, TextStyle } from "#app/ui/text"; import { addTextObject, TextStyle } from "#app/ui/text";
import { addWindow, WindowVariant } from "#app/ui/ui-theme"; import { addWindow, WindowVariant } from "#app/ui/ui-theme";
import { Stat } from "#enums/stat"; import { Stat } from "#enums/stat";
import type { EnemyPokemon } from "#app/field/pokemon";
export class EnemyBattleInfo extends BattleInfo { export class EnemyBattleInfo extends BattleInfo {
protected player: false = false; protected player: false = false;
protected championRibbon: Phaser.GameObjects.Sprite; protected championRibbon: Phaser.GameObjects.Sprite;
protected ownedIcon: Phaser.GameObjects.Sprite; protected ownedIcon: Phaser.GameObjects.Sprite;
public flyoutMenu: BattleFlyout; protected flyoutMenu: BattleFlyout;
// #region Type effectiveness hint objects // #region Type effectiveness hint objects
protected effectivenessContainer: Phaser.GameObjects.Container; protected effectivenessContainer: Phaser.GameObjects.Container;
@ -52,5 +53,40 @@ export class EnemyBattleInfo extends BattleInfo {
this.effectivenessContainer.add([this.effectivenessWindow, this.effectivenessText]); this.effectivenessContainer.add([this.effectivenessWindow, this.effectivenessText]);
} }
override initInfo(pokemon: EnemyPokemon): void {
this.flyoutMenu.initInfo(pokemon);
super.initInfo(pokemon);
}
/**
* Show or hide the type effectiveness multiplier window
* Passing undefined will hide the window
*/
updateEffectiveness(effectiveness?: string) {
this.currentEffectiveness = effectiveness;
if (!globalScene.typeHints || effectiveness === undefined || this.flyoutMenu.flyoutVisible) {
this.effectivenessContainer.setVisible(false);
return;
}
this.effectivenessText.setText(effectiveness);
this.effectivenessWindow.width = 10 + this.effectivenessText.displayWidth;
this.effectivenessContainer.setVisible(true);
}
/**
* Request the flyoutMenu to toggle if available and hides or shows the effectiveness window where necessary
*/
toggleFlyout(visible: boolean): void {
this.flyoutMenu.toggleFlyout(visible);
if (visible) {
this.effectivenessContainer?.setVisible(false);
} else {
this.updateEffectiveness(this.currentEffectiveness);
}
}
setMini(_mini: boolean): void {} // Always mini setMini(_mini: boolean): void {} // Always mini
} }

View File

@ -10,7 +10,7 @@ import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils/common";
import { MoveCategory } from "#enums/MoveCategory"; import { MoveCategory } from "#enums/MoveCategory";
import i18next from "i18next"; import i18next from "i18next";
import { Button } from "#enums/buttons"; import { Button } from "#enums/buttons";
import type { PokemonMove } from "#app/field/pokemon"; import type { EnemyPokemon, PokemonMove } from "#app/field/pokemon";
import type Pokemon from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon";
import type { CommandPhase } from "#app/phases/command-phase"; import type { CommandPhase } from "#app/phases/command-phase";
import MoveInfoOverlay from "./move-info-overlay"; import MoveInfoOverlay from "./move-info-overlay";
@ -279,7 +279,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle {
this.moveInfoOverlay.show(pokemonMove.getMove()); this.moveInfoOverlay.show(pokemonMove.getMove());
pokemon.getOpponents().forEach(opponent => { pokemon.getOpponents().forEach(opponent => {
opponent.updateEffectiveness(this.getEffectivenessText(pokemon, opponent, pokemonMove)); (opponent as EnemyPokemon).updateEffectiveness(this.getEffectivenessText(pokemon, opponent, pokemonMove));
}); });
} }
@ -391,7 +391,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle {
const opponents = (globalScene.getCurrentPhase() as CommandPhase).getPokemon().getOpponents(); const opponents = (globalScene.getCurrentPhase() as CommandPhase).getPokemon().getOpponents();
opponents.forEach(opponent => { opponents.forEach(opponent => {
opponent.updateEffectiveness(undefined); (opponent as EnemyPokemon).updateEffectiveness(undefined);
}); });
} }