Fixed types in held item manager

This commit is contained in:
Wlowscha 2025-06-09 18:29:13 +02:00
parent ff73c5b038
commit 20d4d3aa05
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04

View File

@ -14,7 +14,7 @@ interface HeldItemProperties {
} }
type HeldItemPropertyMap = { type HeldItemPropertyMap = {
[key in HeldItemId]: HeldItemProperties; [key in HeldItemId]?: HeldItemProperties;
}; };
interface FormChangeItemProperties { interface FormChangeItemProperties {
@ -22,7 +22,7 @@ interface FormChangeItemProperties {
} }
type FormChangeItemPropertyMap = { type FormChangeItemPropertyMap = {
[key in FormChangeItem]: FormChangeItemProperties; [key in FormChangeItem]?: FormChangeItemProperties;
}; };
export class PokemonItemManager { export class PokemonItemManager {
@ -31,6 +31,7 @@ export class PokemonItemManager {
constructor() { constructor() {
this.heldItems = {}; this.heldItems = {};
this.formChangeItems = {};
} }
getHeldItems(): number[] { getHeldItems(): number[] {
@ -59,31 +60,40 @@ export class PokemonItemManager {
return itemType in this.heldItems; return itemType in this.heldItems;
} }
/*
getItem(itemType: HeldItemId): HeldItemProperties { getItem(itemType: HeldItemId): HeldItemProperties {
// TODO: Not very safe if (itemType in this.heldItems) {
return this.heldItems[itemType]; return this.heldItems[itemType];
}
} }
*/
getStack(itemType: HeldItemId): number { getStack(itemType: HeldItemId): number {
return itemType in this.heldItems ? this.heldItems[itemType].stack : 0; const item = this.heldItems[itemType];
return item ? item.stack : 0;
} }
add(itemType: HeldItemId, addStack = 1, data?: HELD_ITEM_DATA) { add(itemType: HeldItemId, addStack = 1, data?: HELD_ITEM_DATA) {
const maxStack = allHeldItems[itemType].getMaxStackCount(); const maxStack = allHeldItems[itemType].getMaxStackCount();
const item = this.heldItems[itemType];
if (this.hasItem(itemType)) { if (item) {
// TODO: We may want an error message of some kind instead // TODO: We may want an error message of some kind instead
this.heldItems[itemType].stack = Math.min(this.heldItems[itemType].stack + addStack, maxStack); item.stack = Math.min(item.stack + addStack, maxStack);
} else { } else {
this.heldItems[itemType] = { stack: Math.min(addStack, maxStack), disabled: false, data: data }; this.heldItems[itemType] = { stack: Math.min(addStack, maxStack), disabled: false, data: data };
} }
} }
remove(itemType: HeldItemId, removeStack = 1, all = false) { remove(itemType: HeldItemId, removeStack = 1, all = false) {
this.heldItems[itemType].stack -= removeStack; const item = this.heldItems[itemType];
if (all || this.heldItems[itemType].stack <= 0) { if (item) {
delete this.heldItems[itemType]; item.stack -= removeStack;
if (all || item.stack <= 0) {
delete this.heldItems[itemType];
}
} }
} }
@ -98,7 +108,11 @@ export class PokemonItemManager {
} }
hasActiveFormChangeItem(id: FormChangeItem): boolean { hasActiveFormChangeItem(id: FormChangeItem): boolean {
return id in this.formChangeItems && this.formChangeItems[id].active; const item = this.formChangeItems[id];
if (item) {
return item.active;
}
return false;
} }
getFormChangeItems(): FormChangeItem[] { getFormChangeItems(): FormChangeItem[] {
@ -106,12 +120,18 @@ export class PokemonItemManager {
} }
getActiveFormChangeItems(): FormChangeItem[] { getActiveFormChangeItems(): FormChangeItem[] {
return this.getFormChangeItems().filter(m => this.formChangeItems[m].active); return this.getFormChangeItems().filter(m => this.formChangeItems[m]?.active);
} }
toggleActive(id: FormChangeItem) { toggleActive(id: FormChangeItem) {
if (id in this.formChangeItems) { const item = this.formChangeItems[id];
this.formChangeItems[id].active = !this.formChangeItems[id].active; if (item) {
item.active = !item.active;
} }
} }
clearItems() {
this.heldItems = {};
this.formChangeItems = {};
}
} }