From 6a4e4a345d650c8aa7eb4320f544f0d8c465ae2a Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:56:57 +0200 Subject: [PATCH] Added some utility functions to check if an item fits a list of items/categories, or to filter out which held items fit --- src/enums/held-item-id.ts | 15 +++++++++++++-- src/field/pokemon-held-item-manager.ts | 9 +++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/enums/held-item-id.ts b/src/enums/held-item-id.ts index a31f0c9d4f6..7da668d21b2 100644 --- a/src/enums/held-item-id.ts +++ b/src/enums/held-item-id.ts @@ -121,10 +121,21 @@ export const HeldItemCategoryId = { export type HeldItemCategoryId = (typeof HeldItemCategoryId)[keyof typeof HeldItemCategoryId]; +const ITEM_CATEGORY_MASK = 0xFF00 + function getHeldItemCategory(itemId: HeldItemId): HeldItemCategoryId { - return itemId & 0xFF00; + return itemId & ITEM_CATEGORY_MASK; } export function isItemInCategory(itemId: HeldItemId, category: HeldItemCategoryId): boolean { return getHeldItemCategory(itemId) === category; -} \ No newline at end of file +} + +export function isItemInRequested( + itemId: HeldItemId, + requestedItems: (HeldItemCategoryId | HeldItemId)[] +): boolean { + return requestedItems.some(entry => { + itemId === entry || (itemId & ITEM_CATEGORY_MASK) === entry + }); +} diff --git a/src/field/pokemon-held-item-manager.ts b/src/field/pokemon-held-item-manager.ts index f71d3d73a90..6c66c219369 100644 --- a/src/field/pokemon-held-item-manager.ts +++ b/src/field/pokemon-held-item-manager.ts @@ -1,6 +1,6 @@ import { allHeldItems } from "#app/items/all-held-items"; -import type { HeldItemId } from "#app/enums/held-item-id"; -import type { FormChangeItem } from "#app/data/pokemon-forms"; +import { isItemInRequested, type HeldItemCategoryId, type HeldItemId } from "#app/enums/held-item-id"; +import type { FormChangeItem } from "#enums/form-change-item"; import type { BASE_STAT_TOTAL_DATA } from "#app/items/held-items/base-stat-total"; import type { BASE_STAT_FLAT_DATA } from "#app/items/held-items/base-stat-flat"; @@ -102,6 +102,11 @@ export class PokemonItemManager { } } + filterRequestedItems(requestedItems: (HeldItemCategoryId | HeldItemId)[], transferableOnly = true, exclude = false) { + const currentItems = transferableOnly ? this.getTransferableHeldItems() : this.getHeldItems(); + return currentItems.filter(it => !exclude && isItemInRequested(it, requestedItems)); + } + addFormChangeItem(id: FormChangeItem) { if (!(id in this.formChangeItems)) { this.formChangeItems[id] = { active: false };