mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-02-16 17:27:41 +00:00
parent
f2a6fe5c6a
commit
19885e0558
77
src/field/arena-events.ts
Normal file
77
src/field/arena-events.ts
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import { ArenaTagSide } from "#app/data/arena-tag.js";
|
||||||
|
import { ArenaTagType } from "#app/data/enums/arena-tag-type.js";
|
||||||
|
import { TerrainType } from "#app/data/terrain.js";
|
||||||
|
import { WeatherType } from "#app/data/weather.js";
|
||||||
|
|
||||||
|
/** Alias for all {@linkcode ArenaEvent} type strings */
|
||||||
|
export enum ArenaEventType {
|
||||||
|
/** Triggers when a {@linkcode WeatherType} is added, overlapped, or removed */
|
||||||
|
WEATHER_CHANGED = "onWeatherChanged",
|
||||||
|
/** Triggers when a {@linkcode TerrainType} is added, overlapped, or removed */
|
||||||
|
TERRAIN_CHANGED = "onTerrainChanged",
|
||||||
|
|
||||||
|
/** Triggers when a {@linkcode ArenaTagType} is added or removed */
|
||||||
|
TAG_CHANGED = "onTagChanged",
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base container class for all {@linkcode ArenaEventType} events
|
||||||
|
* @extends Event
|
||||||
|
*/
|
||||||
|
export class ArenaEvent extends Event {
|
||||||
|
/** The total duration of the {@linkcode ArenaEventType} */
|
||||||
|
public duration: number;
|
||||||
|
constructor(eventType: ArenaEventType, duration: number) {
|
||||||
|
super(eventType);
|
||||||
|
|
||||||
|
this.duration = duration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Container class for {@linkcode ArenaEventType.WEATHER_CHANGED} events
|
||||||
|
* @extends ArenaEvent
|
||||||
|
*/
|
||||||
|
export class WeatherChangedEvent extends ArenaEvent {
|
||||||
|
/** The {@linkcode WeatherType} being overridden */
|
||||||
|
public oldWeatherType: WeatherType;
|
||||||
|
/** The {@linkcode WeatherType} being set */
|
||||||
|
public newWeatherType: WeatherType;
|
||||||
|
constructor(oldWeatherType: WeatherType, newWeatherType: WeatherType, duration: number) {
|
||||||
|
super(ArenaEventType.WEATHER_CHANGED, duration);
|
||||||
|
|
||||||
|
this.oldWeatherType = oldWeatherType;
|
||||||
|
this.newWeatherType = newWeatherType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Container class for {@linkcode ArenaEventType.TERRAIN_CHANGED} events
|
||||||
|
* @extends ArenaEvent
|
||||||
|
*/
|
||||||
|
export class TerrainChangedEvent extends ArenaEvent {
|
||||||
|
/** The {@linkcode TerrainType} being overridden */
|
||||||
|
public oldTerrainType: TerrainType;
|
||||||
|
/** The {@linkcode TerrainType} being set */
|
||||||
|
public newTerrainType: TerrainType;
|
||||||
|
constructor(oldTerrainType: TerrainType, newTerrainType: TerrainType, duration: number) {
|
||||||
|
super(ArenaEventType.TERRAIN_CHANGED, duration);
|
||||||
|
|
||||||
|
this.oldTerrainType = oldTerrainType;
|
||||||
|
this.newTerrainType = newTerrainType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Container class for {@linkcode ArenaEventType.TAG_CHANGED} events
|
||||||
|
* @extends ArenaEvent
|
||||||
|
*/
|
||||||
|
export class TagChangedEvent extends ArenaEvent {
|
||||||
|
/** The {@linkcode ArenaTagType} being set */
|
||||||
|
public arenaTagType: ArenaTagType;
|
||||||
|
/** The {@linkcode ArenaTagSide} the tag is being placed on */
|
||||||
|
public arenaTagSide: ArenaTagSide;
|
||||||
|
constructor(arenaTagType: ArenaTagType, arenaTagSide: ArenaTagSide, duration: number) {
|
||||||
|
super(ArenaEventType.TAG_CHANGED, duration);
|
||||||
|
|
||||||
|
this.arenaTagType = arenaTagType;
|
||||||
|
this.arenaTagSide = arenaTagSide;
|
||||||
|
}
|
||||||
|
}
|
@ -19,6 +19,7 @@ import { Terrain, TerrainType } from "../data/terrain";
|
|||||||
import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability";
|
import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability";
|
||||||
import Pokemon from "./pokemon";
|
import Pokemon from "./pokemon";
|
||||||
import * as Overrides from "../overrides";
|
import * as Overrides from "../overrides";
|
||||||
|
import { WeatherChangedEvent, TerrainChangedEvent, TagChangedEvent } from "./arena-events";
|
||||||
|
|
||||||
export class Arena {
|
export class Arena {
|
||||||
public scene: BattleScene;
|
public scene: BattleScene;
|
||||||
@ -34,6 +35,8 @@ export class Arena {
|
|||||||
private pokemonPool: PokemonPools;
|
private pokemonPool: PokemonPools;
|
||||||
private trainerPool: BiomeTierTrainerPools;
|
private trainerPool: BiomeTierTrainerPools;
|
||||||
|
|
||||||
|
public readonly eventTarget: EventTarget = new EventTarget();
|
||||||
|
|
||||||
constructor(scene: BattleScene, biome: Biome, bgm: string) {
|
constructor(scene: BattleScene, biome: Biome, bgm: string) {
|
||||||
this.scene = scene;
|
this.scene = scene;
|
||||||
this.biomeType = biome;
|
this.biomeType = biome;
|
||||||
@ -300,6 +303,7 @@ export class Arena {
|
|||||||
const oldWeatherType = this.weather?.weatherType || WeatherType.NONE;
|
const oldWeatherType = this.weather?.weatherType || WeatherType.NONE;
|
||||||
|
|
||||||
this.weather = weather ? new Weather(weather, hasPokemonSource ? 5 : 0) : null;
|
this.weather = weather ? new Weather(weather, hasPokemonSource ? 5 : 0) : null;
|
||||||
|
this.eventTarget.dispatchEvent(new WeatherChangedEvent(oldWeatherType, this.weather?.weatherType, this.weather?.turnsLeft));
|
||||||
|
|
||||||
if (this.weather) {
|
if (this.weather) {
|
||||||
this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.SUNNY + (weather - 1)));
|
this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.SUNNY + (weather - 1)));
|
||||||
@ -324,6 +328,7 @@ export class Arena {
|
|||||||
const oldTerrainType = this.terrain?.terrainType || TerrainType.NONE;
|
const oldTerrainType = this.terrain?.terrainType || TerrainType.NONE;
|
||||||
|
|
||||||
this.terrain = terrain ? new Terrain(terrain, hasPokemonSource ? 5 : 0) : null;
|
this.terrain = terrain ? new Terrain(terrain, hasPokemonSource ? 5 : 0) : null;
|
||||||
|
this.eventTarget.dispatchEvent(new TerrainChangedEvent(oldTerrainType,this.terrain?.terrainType, this.terrain?.turnsLeft));
|
||||||
|
|
||||||
if (this.terrain) {
|
if (this.terrain) {
|
||||||
if (!ignoreAnim) {
|
if (!ignoreAnim) {
|
||||||
@ -545,6 +550,8 @@ export class Arena {
|
|||||||
this.tags.push(newTag);
|
this.tags.push(newTag);
|
||||||
newTag.onAdd(this);
|
newTag.onAdd(this);
|
||||||
|
|
||||||
|
this.eventTarget.dispatchEvent(new TagChangedEvent(newTag.tagType, newTag.side, newTag.turnCount));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ import { allMoves } from "../data/move";
|
|||||||
import { TrainerVariant } from "../field/trainer";
|
import { TrainerVariant } from "../field/trainer";
|
||||||
import { OutdatedPhase, ReloadSessionPhase } from "#app/phases";
|
import { OutdatedPhase, ReloadSessionPhase } from "#app/phases";
|
||||||
import { Variant, variantData } from "#app/data/variant";
|
import { Variant, variantData } from "#app/data/variant";
|
||||||
|
import { TerrainChangedEvent, WeatherChangedEvent } from "#app/field/arena-events.js";
|
||||||
|
|
||||||
const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary
|
const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary
|
||||||
|
|
||||||
@ -740,6 +741,10 @@ export class GameData {
|
|||||||
});
|
});
|
||||||
|
|
||||||
scene.arena.weather = sessionData.arena.weather;
|
scene.arena.weather = sessionData.arena.weather;
|
||||||
|
scene.arena.eventTarget.dispatchEvent(new WeatherChangedEvent(null, scene.arena.weather?.weatherType, scene.arena.weather?.turnsLeft));
|
||||||
|
|
||||||
|
scene.arena.terrain = sessionData.arena.terrain;
|
||||||
|
scene.arena.eventTarget.dispatchEvent(new TerrainChangedEvent(null, scene.arena.terrain?.terrainType, scene.arena.terrain?.turnsLeft));
|
||||||
// TODO
|
// TODO
|
||||||
//scene.arena.tags = sessionData.arena.tags;
|
//scene.arena.tags = sessionData.arena.tags;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user