From 5c28e1fb11812c24a018914195048b5e9a27f54d Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Sat, 25 May 2024 11:23:53 -0500 Subject: [PATCH] Adds New BattleSceneEventTypes (#1372) * Add BattleSceneEvents * Update battle-scene-events.ts --- src/battle-scene-events.ts | 55 ++++++++++++++++++++++++++++++++++++-- src/battle-scene.ts | 2 ++ src/phases.ts | 4 ++- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/battle-scene-events.ts b/src/battle-scene-events.ts index be3b79ff609..22959493f06 100644 --- a/src/battle-scene-events.ts +++ b/src/battle-scene-events.ts @@ -1,11 +1,31 @@ import Move from "./data/move"; +/** Alias for all {@linkcode BattleScene} events */ export enum BattleSceneEventType { - MOVE_USED = "onMoveUsed" + /** + * Triggers when a move is successfully used + * @see {@linkcode MoveUsedEvent} + */ + MOVE_USED = "onMoveUsed", + /** + * Triggers on the first turn of a new battle + * @see {@linkcode TurnInitEvent} + */ + TURN_INIT = "onTurnInit", + /** + * Triggers after a turn ends in battle + * @see {@linkcode TurnEndEvent} + */ + TURN_END = "onTurnEnd", + /** + * Triggers when a new {@linkcode Arena} is created during initialization + * @see {@linkcode NewArenaEvent} + */ + NEW_ARENA = "onNewArena", } /** - * Container class for `onMoveUsed` events + * Container class for {@linkcode BattleSceneEventType.MOVE_USED} events * @extends Event */ export class MoveUsedEvent extends Event { @@ -23,3 +43,34 @@ export class MoveUsedEvent extends Event { this.ppUsed = ppUsed; } } +/** + * Container class for {@linkcode BattleSceneEventType.TURN_INIT} events + * @extends Event +*/ +export class TurnInitEvent extends Event { + constructor() { + super(BattleSceneEventType.TURN_INIT); + } +} +/** + * Container class for {@linkcode BattleSceneEventType.TURN_END} events + * @extends Event +*/ +export class TurnEndEvent extends Event { + /** The amount of turns in the current battle */ + public turnCount: number; + constructor(turnCount: number) { + super(BattleSceneEventType.TURN_END); + + this.turnCount = turnCount; + } +} +/** + * Container class for {@linkcode BattleSceneEventType.NEW_ARENA} events + * @extends Event +*/ +export class NewArenaEvent extends Event { + constructor() { + super(BattleSceneEventType.NEW_ARENA); + } +} diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 93f02c26143..bd38ec2a0bc 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -56,6 +56,7 @@ import { Localizable } from "./plugins/i18n"; import * as Overrides from "./overrides"; import {InputsController} from "./inputs-controller"; import {UiInputs} from "./ui-inputs"; +import { NewArenaEvent } from "./battle-scene-events"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -995,6 +996,7 @@ export default class BattleScene extends SceneBase { newArena(biome: Biome): Arena { this.arena = new Arena(this, biome, Biome[biome].toLowerCase()); + this.eventTarget.dispatchEvent(new NewArenaEvent()); this.arenaBg.pipelineData = { terrainColorRatio: this.arena.getBgTerrainColorRatioForBiome() }; diff --git a/src/phases.ts b/src/phases.ts index 053f5774ac7..44ec262d3e6 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -61,7 +61,7 @@ import { Abilities } from "./data/enums/abilities"; import * as Overrides from "./overrides"; import { TextStyle, addTextObject } from "./ui/text"; import { Type } from "./data/type"; -import { MoveUsedEvent } from "./battle-scene-events"; +import { MoveUsedEvent, TurnEndEvent, TurnInitEvent } from "./battle-scene-events"; export class LoginPhase extends Phase { @@ -1719,6 +1719,7 @@ export class TurnInitPhase extends FieldPhase { super.start(); //this.scene.pushPhase(new MoveAnimTestPhase(this.scene)); + this.scene.eventTarget.dispatchEvent(new TurnInitEvent()); this.scene.getField().forEach((pokemon, i) => { if (pokemon?.isActive()) { @@ -2252,6 +2253,7 @@ export class TurnEndPhase extends FieldPhase { super.start(); this.scene.currentBattle.incrementTurn(this.scene); + this.scene.eventTarget.dispatchEvent(new TurnEndEvent(this.scene.currentBattle.turn)); const handlePokemon = (pokemon: Pokemon) => { pokemon.lapseTags(BattlerTagLapseType.TURN_END);