mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-04 07:22:19 +02:00
Remove APQP
This commit is contained in:
parent
acbcd3e308
commit
3aa1940a8d
@ -80,6 +80,7 @@ import { noAbilityTypeOverrideMoves } from "../moves/invalid-moves";
|
|||||||
import type { Localizable } from "#app/@types/locales";
|
import type { Localizable } from "#app/@types/locales";
|
||||||
import { applyAbAttrs } from "./apply-ab-attrs";
|
import { applyAbAttrs } from "./apply-ab-attrs";
|
||||||
import { MovePriorityModifier } from "#enums/move-priority-modifier";
|
import { MovePriorityModifier } from "#enums/move-priority-modifier";
|
||||||
|
import { MovePhaseTimingModifier } from "#enums/move-phase-timing-modifier";
|
||||||
|
|
||||||
export class Ability implements Localizable {
|
export class Ability implements Localizable {
|
||||||
public id: AbilityId;
|
public id: AbilityId;
|
||||||
@ -4016,6 +4017,7 @@ export class CommanderAbAttr extends AbAttr {
|
|||||||
return (
|
return (
|
||||||
globalScene.currentBattle?.double &&
|
globalScene.currentBattle?.double &&
|
||||||
!isNullOrUndefined(ally) &&
|
!isNullOrUndefined(ally) &&
|
||||||
|
ally.isActive(true) &&
|
||||||
ally.species.speciesId === SpeciesId.DONDOZO &&
|
ally.species.speciesId === SpeciesId.DONDOZO &&
|
||||||
!(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED))
|
!(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED))
|
||||||
);
|
);
|
||||||
@ -6093,10 +6095,19 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr {
|
|||||||
// If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance
|
// If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance
|
||||||
if (move.getMove().is("AttackMove") || move.getMove().is("StatusMove")) {
|
if (move.getMove().is("AttackMove") || move.getMove().is("StatusMove")) {
|
||||||
const target = this.getTarget(dancer, source, targets);
|
const target = this.getTarget(dancer, source, targets);
|
||||||
phaseManager.unshiftNew("MovePhase", dancer, target, move, true, true);
|
phaseManager.pushNew("MovePhase", dancer, target, move, true, true, false, MovePhaseTimingModifier.FIRST);
|
||||||
} else if (move.getMove().is("SelfStatusMove")) {
|
} else if (move.getMove().is("SelfStatusMove")) {
|
||||||
// If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself
|
// If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself
|
||||||
phaseManager.unshiftNew("MovePhase", dancer, [dancer.getBattlerIndex()], move, true, true);
|
phaseManager.pushNew(
|
||||||
|
"MovePhase",
|
||||||
|
dancer,
|
||||||
|
[dancer.getBattlerIndex()],
|
||||||
|
move,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
MovePhaseTimingModifier.FIRST,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6219,7 +6219,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr {
|
|||||||
if (user.fieldPosition === FieldPosition.CENTER) {
|
if (user.fieldPosition === FieldPosition.CENTER) {
|
||||||
user.setFieldPosition(FieldPosition.LEFT);
|
user.setFieldPosition(FieldPosition.LEFT);
|
||||||
}
|
}
|
||||||
globalScene.phaseManager.unshiftNew("SwitchSummonPhase", SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false);
|
globalScene.phaseManager.pushNew("SwitchSummonPhase", SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -6769,7 +6769,7 @@ class CallMoveAttr extends OverrideMoveEffectAttr {
|
|||||||
: [ this.hasTarget ? target.getBattlerIndex() : moveTargets.targets[user.randBattleSeedInt(moveTargets.targets.length)] ]; // account for Mirror Move having a target already
|
: [ this.hasTarget ? target.getBattlerIndex() : moveTargets.targets[user.randBattleSeedInt(moveTargets.targets.length)] ]; // account for Mirror Move having a target already
|
||||||
user.getMoveQueue().push({ move: move.id, targets: targets, virtual: true, ignorePP: true });
|
user.getMoveQueue().push({ move: move.id, targets: targets, virtual: true, ignorePP: true });
|
||||||
globalScene.phaseManager.unshiftNew("LoadMoveAnimPhase", move.id);
|
globalScene.phaseManager.unshiftNew("LoadMoveAnimPhase", move.id);
|
||||||
globalScene.phaseManager.unshiftNew("MovePhase", user, targets, new PokemonMove(move.id, 0, 0, true), true, true);
|
globalScene.phaseManager.pushNew("MovePhase", user, targets, new PokemonMove(move.id, 0, 0, true), true, true, false, MovePhaseTimingModifier.FIRST);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6998,7 +6998,7 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr {
|
|||||||
|
|
||||||
user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true });
|
user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true });
|
||||||
globalScene.phaseManager.unshiftNew("LoadMoveAnimPhase", moveId);
|
globalScene.phaseManager.unshiftNew("LoadMoveAnimPhase", moveId);
|
||||||
globalScene.phaseManager.unshiftNew("MovePhase", user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true);
|
globalScene.phaseManager.pushNew("MovePhase", user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7085,7 +7085,7 @@ export class RepeatMoveAttr extends MoveEffectAttr {
|
|||||||
}));
|
}));
|
||||||
target.getMoveQueue().unshift({ move: lastMove.move, targets: moveTargets, ignorePP: false });
|
target.getMoveQueue().unshift({ move: lastMove.move, targets: moveTargets, ignorePP: false });
|
||||||
target.turnData.extraTurns++;
|
target.turnData.extraTurns++;
|
||||||
globalScene.phaseManager.appendNewToPhase("MoveEndPhase", "MovePhase", target, moveTargets, movesetMove, false, false, false, MovePhaseTimingModifier.FIRST);
|
globalScene.phaseManager.pushNew("MovePhase", target, moveTargets, movesetMove, false, false, false, MovePhaseTimingModifier.FIRST);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ import type { Phase } from "#app/phase";
|
|||||||
import type { default as Pokemon } from "#app/field/pokemon";
|
import type { default as Pokemon } from "#app/field/pokemon";
|
||||||
import type { DynamicPhaseString, PhaseMap, PhaseString, StaticPhaseString } from "./@types/phase-types";
|
import type { DynamicPhaseString, PhaseMap, PhaseString, StaticPhaseString } from "./@types/phase-types";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import { ActivatePriorityQueuePhase } from "#app/phases/activate-priority-queue-phase";
|
|
||||||
import { AddEnemyBuffModifierPhase } from "#app/phases/add-enemy-buff-modifier-phase";
|
import { AddEnemyBuffModifierPhase } from "#app/phases/add-enemy-buff-modifier-phase";
|
||||||
import { AttemptCapturePhase } from "#app/phases/attempt-capture-phase";
|
import { AttemptCapturePhase } from "#app/phases/attempt-capture-phase";
|
||||||
import { AttemptRunPhase } from "#app/phases/attempt-run-phase";
|
import { AttemptRunPhase } from "#app/phases/attempt-run-phase";
|
||||||
@ -116,7 +115,6 @@ import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
|||||||
* This allows for easy creation of new phases without needing to import each phase individually.
|
* This allows for easy creation of new phases without needing to import each phase individually.
|
||||||
*/
|
*/
|
||||||
const PHASES = Object.freeze({
|
const PHASES = Object.freeze({
|
||||||
ActivatePriorityQueuePhase,
|
|
||||||
AddEnemyBuffModifierPhase,
|
AddEnemyBuffModifierPhase,
|
||||||
AttemptCapturePhase,
|
AttemptCapturePhase,
|
||||||
AttemptRunPhase,
|
AttemptRunPhase,
|
||||||
@ -263,7 +261,7 @@ export class PhaseManager {
|
|||||||
*/
|
*/
|
||||||
pushPhase(phase: Phase, defer = false): void {
|
pushPhase(phase: Phase, defer = false): void {
|
||||||
if (this.dynamicQueueManager.isDynamicPhase(phase.phaseName)) {
|
if (this.dynamicQueueManager.isDynamicPhase(phase.phaseName)) {
|
||||||
this.pushDynamicPhase(phase);
|
this.dynamicQueueManager.queueDynamicPhase(phase);
|
||||||
} else {
|
} else {
|
||||||
(!defer ? this.phaseQueue : this.nextCommandPhaseQueue).push(phase);
|
(!defer ? this.phaseQueue : this.nextCommandPhaseQueue).push(phase);
|
||||||
}
|
}
|
||||||
@ -344,6 +342,13 @@ export class PhaseManager {
|
|||||||
this.conditionalQueue = [];
|
this.conditionalQueue = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.phaseQueue[0].is("WeatherEffectPhase")) {
|
||||||
|
const dynamicPhase = this.dynamicQueueManager.popNextPhase();
|
||||||
|
if (dynamicPhase) {
|
||||||
|
this.phaseQueue.unshift(dynamicPhase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.currentPhase = this.phaseQueue.shift() ?? null;
|
this.currentPhase = this.phaseQueue.shift() ?? null;
|
||||||
|
|
||||||
const unactivatedConditionalPhases: [() => boolean, Phase][] = [];
|
const unactivatedConditionalPhases: [() => boolean, Phase][] = [];
|
||||||
@ -418,6 +423,9 @@ export class PhaseManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tryRemovePhase(phaseFilter: PhaseConditionFunc): boolean {
|
tryRemovePhase(phaseFilter: PhaseConditionFunc): boolean {
|
||||||
|
if (this.dynamicQueueManager.removePhase(phaseFilter)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
const phaseIndex = this.phaseQueue.findIndex(phaseFilter);
|
const phaseIndex = this.phaseQueue.findIndex(phaseFilter);
|
||||||
if (phaseIndex > -1) {
|
if (phaseIndex > -1) {
|
||||||
this.phaseQueue.splice(phaseIndex, 1);
|
this.phaseQueue.splice(phaseIndex, 1);
|
||||||
@ -450,22 +458,15 @@ export class PhaseManager {
|
|||||||
* @param targetPhase - The phase to search for in phaseQueue
|
* @param targetPhase - The phase to search for in phaseQueue
|
||||||
* @returns boolean if a targetPhase was found and added
|
* @returns boolean if a targetPhase was found and added
|
||||||
*/
|
*/
|
||||||
prependToPhase(phase: Phase, targetPhase: PhaseString): boolean {
|
prependToPhase(phase: Phase, targetPhase: StaticPhaseString): boolean {
|
||||||
const insertPhase = this.dynamicQueueManager.isDynamicPhase(phase.phaseName)
|
|
||||||
? new ActivatePriorityQueuePhase(phase.phaseName)
|
|
||||||
: phase;
|
|
||||||
const target = PHASES[targetPhase];
|
const target = PHASES[targetPhase];
|
||||||
const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target);
|
const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target);
|
||||||
|
|
||||||
if (this.dynamicQueueManager.isDynamicPhase(phase.phaseName)) {
|
|
||||||
this.dynamicQueueManager.queueDynamicPhase(phase);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (targetIndex !== -1) {
|
if (targetIndex !== -1) {
|
||||||
this.phaseQueue.splice(targetIndex, 0, insertPhase);
|
this.phaseQueue.splice(targetIndex, 0, phase);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
this.unshiftPhase(insertPhase);
|
this.unshiftPhase(phase);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -478,60 +479,28 @@ export class PhaseManager {
|
|||||||
* @returns `true` if a `targetPhase` was found to append to
|
* @returns `true` if a `targetPhase` was found to append to
|
||||||
*/
|
*/
|
||||||
appendToPhase(phase: Phase, targetPhase: StaticPhaseString, condition?: PhaseConditionFunc): boolean {
|
appendToPhase(phase: Phase, targetPhase: StaticPhaseString, condition?: PhaseConditionFunc): boolean {
|
||||||
const insertPhase = this.dynamicQueueManager.isDynamicPhase(phase.phaseName)
|
|
||||||
? new ActivatePriorityQueuePhase(phase.phaseName)
|
|
||||||
: phase;
|
|
||||||
const target = PHASES[targetPhase];
|
const target = PHASES[targetPhase];
|
||||||
const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target && (!condition || condition(ph)));
|
const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target && (!condition || condition(ph)));
|
||||||
|
|
||||||
if (this.dynamicQueueManager.isDynamicPhase(phase.phaseName)) {
|
|
||||||
this.dynamicQueueManager.queueDynamicPhase(phase);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (targetIndex !== -1 && this.phaseQueue.length > targetIndex) {
|
if (targetIndex !== -1 && this.phaseQueue.length > targetIndex) {
|
||||||
this.phaseQueue.splice(targetIndex + 1, 0, insertPhase);
|
this.phaseQueue.splice(targetIndex + 1, 0, phase);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
this.unshiftPhase(insertPhase);
|
this.unshiftPhase(phase);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Pushes a phase onto its corresponding dynamic queue and marks the activation point in {@linkcode phaseQueue}
|
|
||||||
*
|
|
||||||
* The {@linkcode ActivatePriorityQueuePhase} will run the top phase in the dynamic queue (not necessarily {@linkcode phase})
|
|
||||||
* @param phase The phase to push
|
|
||||||
*/
|
|
||||||
public pushDynamicPhase(phase: Phase): void {
|
|
||||||
this.pushNew("ActivatePriorityQueuePhase", phase.phaseName);
|
|
||||||
this.dynamicQueueManager.queueDynamicPhase(phase);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unshifts the top phase from the corresponding dynamic queue onto {@linkcode phaseQueue}
|
* Unshifts the top phase from the corresponding dynamic queue onto {@linkcode phaseQueue}
|
||||||
* @param type {@linkcode DynamicPhaseString} The type of dynamic phase to start
|
* @param type {@linkcode DynamicPhaseString} The type of dynamic phase to start
|
||||||
*/
|
*/
|
||||||
public startNextDynamicPhase(): void {
|
public startNextDynamicPhase(type?: DynamicPhaseString): void {
|
||||||
const phase = this.dynamicQueueManager.popNextPhase();
|
const phase = this.dynamicQueueManager.popNextPhase(type);
|
||||||
if (phase) {
|
if (phase) {
|
||||||
this.unshiftPhase(phase);
|
this.unshiftPhase(phase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Unshifts an {@linkcode ActivatePriorityQueuePhase} for {@linkcode phase}, then pushes {@linkcode phase} to its dynamic queue
|
|
||||||
*
|
|
||||||
* This is the same as {@linkcode pushDynamicPhase}, except the activation phase is unshifted
|
|
||||||
*
|
|
||||||
* {@linkcode phase} is not guaranteed to be the next phase from the queue to run (if the queue is not empty)
|
|
||||||
* @param phase The phase to add
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
public startDynamicPhase(phase: Phase): void {
|
|
||||||
this.unshiftNew("ActivatePriorityQueuePhase", phase.phaseName);
|
|
||||||
this.dynamicQueueManager.queueDynamicPhase(phase);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a MessagePhase, either to PhaseQueuePrepend or nextCommandPhaseQueue
|
* Adds a MessagePhase, either to PhaseQueuePrepend or nextCommandPhaseQueue
|
||||||
* @param message - string for MessagePhase
|
* @param message - string for MessagePhase
|
||||||
@ -583,6 +552,11 @@ export class PhaseManager {
|
|||||||
* Moves everything from nextCommandPhaseQueue to phaseQueue (keeping order)
|
* Moves everything from nextCommandPhaseQueue to phaseQueue (keeping order)
|
||||||
*/
|
*/
|
||||||
private populatePhaseQueue(): void {
|
private populatePhaseQueue(): void {
|
||||||
|
const dynamicPhase = this.dynamicQueueManager.popNextPhase();
|
||||||
|
if (dynamicPhase) {
|
||||||
|
this.phaseQueue.unshift(dynamicPhase);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this.nextCommandPhaseQueue.length) {
|
if (this.nextCommandPhaseQueue.length) {
|
||||||
this.phaseQueue.push(...this.nextCommandPhaseQueue);
|
this.phaseQueue.push(...this.nextCommandPhaseQueue);
|
||||||
this.nextCommandPhaseQueue.splice(0, this.nextCommandPhaseQueue.length);
|
this.nextCommandPhaseQueue.splice(0, this.nextCommandPhaseQueue.length);
|
||||||
@ -624,7 +598,10 @@ export class PhaseManager {
|
|||||||
* @param phase - The name of the phase to create
|
* @param phase - The name of the phase to create
|
||||||
* @param args - The arguments to pass to the phase constructor
|
* @param args - The arguments to pass to the phase constructor
|
||||||
*/
|
*/
|
||||||
public unshiftNew<T extends PhaseString>(phase: T, ...args: ConstructorParameters<PhaseConstructorMap[T]>): void {
|
public unshiftNew<T extends StaticPhaseString>(
|
||||||
|
phase: T,
|
||||||
|
...args: ConstructorParameters<PhaseConstructorMap[T]>
|
||||||
|
): void {
|
||||||
this.unshiftPhase(this.create(phase, ...args));
|
this.unshiftPhase(this.create(phase, ...args));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -637,7 +614,7 @@ export class PhaseManager {
|
|||||||
* @returns `true` if a `targetPhase` was found to prepend to
|
* @returns `true` if a `targetPhase` was found to prepend to
|
||||||
*/
|
*/
|
||||||
public prependNewToPhase<T extends PhaseString>(
|
public prependNewToPhase<T extends PhaseString>(
|
||||||
targetPhase: PhaseString,
|
targetPhase: StaticPhaseString,
|
||||||
phase: T,
|
phase: T,
|
||||||
...args: ConstructorParameters<PhaseConstructorMap[T]>
|
...args: ConstructorParameters<PhaseConstructorMap[T]>
|
||||||
): boolean {
|
): boolean {
|
||||||
@ -660,13 +637,6 @@ export class PhaseManager {
|
|||||||
return this.appendToPhase(this.create(phase, ...args), targetPhase);
|
return this.appendToPhase(this.create(phase, ...args), targetPhase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public startNewDynamicPhase<T extends DynamicPhaseString>(
|
|
||||||
phase: T,
|
|
||||||
...args: ConstructorParameters<PhaseConstructorMap[T]>
|
|
||||||
): void {
|
|
||||||
this.startDynamicPhase(this.create(phase, ...args));
|
|
||||||
}
|
|
||||||
|
|
||||||
public forceMoveNext(phaseCondition: PhaseConditionFunc) {
|
public forceMoveNext(phaseCondition: PhaseConditionFunc) {
|
||||||
this.dynamicQueueManager.setMoveTimingModifier(phaseCondition, MovePhaseTimingModifier.FIRST);
|
this.dynamicQueueManager.setMoveTimingModifier(phaseCondition, MovePhaseTimingModifier.FIRST);
|
||||||
}
|
}
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
import type { PhaseString } from "#app/@types/phase-types";
|
|
||||||
import { globalScene } from "#app/global-scene";
|
|
||||||
import { Phase } from "#app/phase";
|
|
||||||
|
|
||||||
export class ActivatePriorityQueuePhase extends Phase {
|
|
||||||
public readonly phaseName = "ActivatePriorityQueuePhase";
|
|
||||||
private readonly type: PhaseString;
|
|
||||||
|
|
||||||
constructor(type: PhaseString) {
|
|
||||||
super();
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
override start() {
|
|
||||||
super.start();
|
|
||||||
globalScene.phaseManager.startNextDynamicPhase();
|
|
||||||
this.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
public getType(): PhaseString {
|
|
||||||
return this.type;
|
|
||||||
}
|
|
||||||
}
|
|
@ -175,8 +175,7 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||||||
globalScene.phaseManager.unshiftNew("HideAbilityPhase");
|
globalScene.phaseManager.unshiftNew("HideAbilityPhase");
|
||||||
}
|
}
|
||||||
|
|
||||||
globalScene.phaseManager.appendNewToPhase(
|
globalScene.phaseManager.pushNew(
|
||||||
"MoveEndPhase",
|
|
||||||
"MovePhase",
|
"MovePhase",
|
||||||
target,
|
target,
|
||||||
newTargets,
|
newTargets,
|
||||||
|
@ -28,12 +28,19 @@ export class PostSummonPhase extends PokemonPhase {
|
|||||||
|
|
||||||
const field = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField();
|
const field = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField();
|
||||||
for (const p of field) {
|
for (const p of field) {
|
||||||
|
if (p.isActive(true)) {
|
||||||
applyAbAttrs("CommanderAbAttr", p, null, false);
|
applyAbAttrs("CommanderAbAttr", p, null, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.end();
|
this.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override end() {
|
||||||
|
globalScene.phaseManager.startNextDynamicPhase("PostSummonPhase");
|
||||||
|
super.end();
|
||||||
|
}
|
||||||
|
|
||||||
public getPriority() {
|
public getPriority() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -289,6 +289,7 @@ export class SummonPhase extends PartyMemberPokemonPhase {
|
|||||||
|
|
||||||
queuePostSummon(): void {
|
queuePostSummon(): void {
|
||||||
globalScene.phaseManager.pushNew("PostSummonPhase", this.getPokemon().getBattlerIndex());
|
globalScene.phaseManager.pushNew("PostSummonPhase", this.getPokemon().getBattlerIndex());
|
||||||
|
globalScene.phaseManager.startNextDynamicPhase("PostSummonPhase");
|
||||||
}
|
}
|
||||||
|
|
||||||
end() {
|
end() {
|
||||||
|
@ -79,7 +79,7 @@ export class SwitchPhase extends BattlePhase {
|
|||||||
p => p.is("PostSummonPhase") && p.player && p.fieldIndex === this.fieldIndex,
|
p => p.is("PostSummonPhase") && p.player && p.fieldIndex === this.fieldIndex,
|
||||||
);
|
);
|
||||||
const switchType = option === PartyOption.PASS_BATON ? SwitchType.BATON_PASS : this.switchType;
|
const switchType = option === PartyOption.PASS_BATON ? SwitchType.BATON_PASS : this.switchType;
|
||||||
globalScene.phaseManager.unshiftNew("SwitchSummonPhase", switchType, fieldIndex, slotIndex, this.doReturn);
|
globalScene.phaseManager.pushNew("SwitchSummonPhase", switchType, fieldIndex, slotIndex, this.doReturn);
|
||||||
}
|
}
|
||||||
globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end());
|
globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end());
|
||||||
},
|
},
|
||||||
|
@ -245,7 +245,7 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
queuePostSummon(): void {
|
queuePostSummon(): void {
|
||||||
globalScene.phaseManager.startNewDynamicPhase("PostSummonPhase", this.getPokemon().getBattlerIndex());
|
globalScene.phaseManager.pushNew("PostSummonPhase", this.getPokemon().getBattlerIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -132,7 +132,7 @@ export class TurnStartPhase extends FieldPhase {
|
|||||||
case Command.POKEMON:
|
case Command.POKEMON:
|
||||||
{
|
{
|
||||||
const switchType = turnCommand.args?.[0] ? SwitchType.BATON_PASS : SwitchType.SWITCH;
|
const switchType = turnCommand.args?.[0] ? SwitchType.BATON_PASS : SwitchType.SWITCH;
|
||||||
phaseManager.unshiftNew(
|
phaseManager.pushNew(
|
||||||
"SwitchSummonPhase",
|
"SwitchSummonPhase",
|
||||||
switchType,
|
switchType,
|
||||||
pokemon.getFieldIndex(),
|
pokemon.getFieldIndex(),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import type { PhaseConditionFunc } from "#app/@types/phase-condition";
|
import type { PhaseConditionFunc } from "#app/@types/phase-condition";
|
||||||
import type { PhaseString } from "#app/@types/phase-types";
|
import type { DynamicPhaseString, PhaseString } from "#app/@types/phase-types";
|
||||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||||
import type { Phase } from "#app/phase";
|
import type { Phase } from "#app/phase";
|
||||||
import { MovePhasePriorityQueue } from "#app/queues/move-phase-priority-queue";
|
import { MovePhasePriorityQueue } from "#app/queues/move-phase-priority-queue";
|
||||||
@ -29,8 +29,11 @@ export class DynamicQueueManager {
|
|||||||
this.dynamicPhaseMap.get(phase.phaseName)?.push(phase);
|
this.dynamicPhaseMap.get(phase.phaseName)?.push(phase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public popNextPhase(): Phase | undefined {
|
public popNextPhase(type?: DynamicPhaseString): Phase | undefined {
|
||||||
return [...this.dynamicPhaseMap.values()].find(queue => !queue.isEmpty())?.pop();
|
const queue = type
|
||||||
|
? this.dynamicPhaseMap.get(type)
|
||||||
|
: [...this.dynamicPhaseMap.values()].find(queue => !queue.isEmpty());
|
||||||
|
return queue?.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
public isDynamicPhase(type: PhaseString): boolean {
|
public isDynamicPhase(type: PhaseString): boolean {
|
||||||
|
@ -10,6 +10,7 @@ export class MovePhasePriorityQueue extends PokemonPhasePriorityQueue<MovePhase>
|
|||||||
public override reorder(): void {
|
public override reorder(): void {
|
||||||
super.reorder();
|
super.reorder();
|
||||||
this.sortPostSpeed();
|
this.sortPostSpeed();
|
||||||
|
console.log(this.queue.map(p => p.getPokemon().name));
|
||||||
}
|
}
|
||||||
|
|
||||||
public setTimingModifier(condition: PhaseConditionFunc, modifier: MovePhaseTimingModifier): void {
|
public setTimingModifier(condition: PhaseConditionFunc, modifier: MovePhaseTimingModifier): void {
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import { globalScene } from "#app/global-scene";
|
|
||||||
import { ActivatePriorityQueuePhase } from "#app/phases/activate-priority-queue-phase";
|
|
||||||
import { PostSummonActivateAbilityPhase } from "#app/phases/post-summon-activate-ability-phase";
|
import { PostSummonActivateAbilityPhase } from "#app/phases/post-summon-activate-ability-phase";
|
||||||
import type { PostSummonPhase } from "#app/phases/post-summon-phase";
|
import type { PostSummonPhase } from "#app/phases/post-summon-phase";
|
||||||
import { PokemonPhasePriorityQueue } from "#app/queues/pokemon-phase-priority-queue";
|
import { PokemonPhasePriorityQueue } from "#app/queues/pokemon-phase-priority-queue";
|
||||||
@ -30,13 +28,10 @@ export class PostSummonPhasePriorityQueue extends PokemonPhasePriorityQueue<Post
|
|||||||
private queueAbilityPhase(phase: PostSummonPhase): void {
|
private queueAbilityPhase(phase: PostSummonPhase): void {
|
||||||
const phasePokemon = phase.getPokemon();
|
const phasePokemon = phase.getPokemon();
|
||||||
|
|
||||||
phasePokemon.getAbilityPriorities().forEach((priority, idx) => {
|
phasePokemon
|
||||||
this.queue.push(new PostSummonActivateAbilityPhase(phasePokemon.getBattlerIndex(), priority, !!idx));
|
.getAbilityPriorities()
|
||||||
globalScene.phaseManager.appendToPhase(
|
.forEach((priority, idx) =>
|
||||||
new ActivatePriorityQueuePhase("PostSummonPhase"),
|
this.queue.push(new PostSummonActivateAbilityPhase(phasePokemon.getBattlerIndex(), priority, !!idx)),
|
||||||
"ActivatePriorityQueuePhase",
|
|
||||||
(p: ActivatePriorityQueuePhase) => p.getType() === "PostSummonPhase",
|
|
||||||
);
|
);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user