Introducing a PokemonItemManager class

This commit is contained in:
Wlowscha 2025-04-13 21:36:32 +02:00
parent 24845bcf82
commit dfc0d29ec9
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04
3 changed files with 31 additions and 19 deletions

View File

@ -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)]);
}
}
}

View File

@ -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());
}

View File

@ -191,7 +191,7 @@ export class AttackTypeBoosterHeldItemAttr extends HeldItemAttr {
export function applyHeldItemAttrs(attrType: Constructor<HeldItemAttr>, 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);
}