diff --git a/src/samples/slay-the-spire-like/system/grid-inventory/transform.ts b/src/samples/slay-the-spire-like/system/grid-inventory/transform.ts index c1e0cb1..720bf03 100644 --- a/src/samples/slay-the-spire-like/system/grid-inventory/transform.ts +++ b/src/samples/slay-the-spire-like/system/grid-inventory/transform.ts @@ -1,3 +1,4 @@ +import { EffectData } from "../types"; import type { ParsedShape } from "../utils/parse-shape"; import type { Transform2D } from "../utils/shape-collision"; import { @@ -10,6 +11,7 @@ import { } from "../utils/shape-collision"; import type { CellKey, + GameItemMeta, GridInventory, InventoryItem, MutationResult, @@ -255,3 +257,38 @@ export function getAdjacentItems( return adjacent; } + +// export type EffectTable = Record; +export function getItemEffects( + inv: GridInventory, + lookup: EffectData[], +) { + const effects = {} as Record< + string, + Record + >; + + for (const item of inv.items.values()) { + if (!item.meta) continue; + const { startEffects } = item.meta; + if (!startEffects) continue; + + const table = (effects[item.id] = {} as Record< + string, + { + data: EffectData; + stacks: number; + } + >); + for (const [id, stacks] of Object.entries(startEffects)) { + const data = lookup.find((row) => row.id === id); + if (!data) continue; + table[id] = { + data, + stacks, + }; + } + } + + return effects; +}