add caching for inventory searching

This commit is contained in:
Rowan 2025-05-02 13:09:35 -05:00
parent 6df47a294b
commit 70c9c1ad16

View file

@ -43,12 +43,24 @@ class ItemInstance {
} }
export default class Inventory extends Node { export default class Inventory extends Node {
private static cache = new Map()
items: Map<StringName, ItemInstance> = new Map() items: Map<StringName, ItemInstance> = new Map()
static find_inventory(root: Node): Inventory | null | undefined { static find_inventory(root: Node): Inventory | null | undefined {
if (Inventory.cache.has(root)) {
return Inventory.cache.get(root)
}
const child_enumerator: GArrayEnumerator<Node> = new GArrayEnumerator(root.get_children()) const child_enumerator: GArrayEnumerator<Node> = new GArrayEnumerator(root.get_children())
const children = Enumerable.from(child_enumerator) const children = Enumerable.from(child_enumerator)
return children.find(child => child instanceof Inventory) as Inventory const inventory = children.find(child => child instanceof Inventory) as Inventory
if (inventory != null) {
Inventory.cache.set(root, inventory)
}
return inventory
} }
add(item: ItemData, quantity: number = 1) { add(item: ItemData, quantity: number = 1) {