diff --git a/src/field/pokemon-item-manager.ts b/src/field/pokemon-item-manager.ts new file mode 100644 index 00000000000..f00cf63f763 --- /dev/null +++ b/src/field/pokemon-item-manager.ts @@ -0,0 +1,26 @@ +import { allHeldItems } from "#app/modifier/held-items"; +import type { HeldItemType } from "#app/modifier/held-items"; + +export class PokemonItemManager { + private heldItems: [HeldItemType, number][]; + + constructor() { + this.heldItems = []; + } + + getHeldItems(): [HeldItemType, number][] { + return this.heldItems; + } + + addHeldItem(itemType: HeldItemType, stack: number) { + const maxStack = allHeldItems[itemType].getMaxStackCount(); + + const existing = this.heldItems.find(([type]) => type === itemType); + + if (existing) { + existing[1] = Math.min(existing[1] + stack, maxStack); + } else { + this.heldItems.push([itemType, Math.min(stack, maxStack)]); + } + } +} diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 6d99aa91193..f2c11de396a 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -259,7 +259,7 @@ import { MoveFlags } from "#enums/MoveFlags"; import { timedEventManager } from "#app/global-event-manager"; import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; import { ResetStatusPhase } from "#app/phases/reset-status-phase"; -import { allHeldItems, HeldItemType } from "#app/modifier/held-items"; +import { PokemonItemManager } from "./pokemon-item-manager"; export enum LearnMoveSituation { MISC, @@ -342,7 +342,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { private shinySparkle: Phaser.GameObjects.Sprite; - private heldItems: [HeldItemType, number][] = []; + public heldItemManager: PokemonItemManager; constructor( x: number, @@ -537,6 +537,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!dataSource) { this.calculateStats(); } + + this.heldItemManager = new PokemonItemManager(); } /** @@ -1189,22 +1191,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) as PokemonHeldItemModifier[]; } - getHeldItems2(): [HeldItemType, number][] { - return this.heldItems; - } - - addHeldItem(itemType: HeldItemType, stack: number) { - const maxStack = allHeldItems[itemType].getMaxStackCount(); - - const existing = this.heldItems.find(([type]) => type === itemType); - - if (existing) { - existing[1] = Math.min(existing[1] + stack, maxStack); - } else { - this.heldItems.push([itemType, Math.min(stack, maxStack)]); - } - } - updateScale(): void { this.setScale(this.getSpriteScale()); } diff --git a/src/modifier/held-items.ts b/src/modifier/held-items.ts index 284365bb02d..10e03a533b3 100644 --- a/src/modifier/held-items.ts +++ b/src/modifier/held-items.ts @@ -191,7 +191,7 @@ export class AttackTypeBoosterHeldItemAttr extends HeldItemAttr { export function applyHeldItemAttrs(attrType: Constructor, pokemon: Pokemon, ...args: any[]) { if (pokemon) { - for (const [item, stackCount] of pokemon.getHeldItems2()) { + for (const [item, stackCount] of pokemon.heldItemManager.getHeldItems()) { if (allHeldItems[item].hasAttr(attrType)) { attrType.apply(stackCount, ...args); }