fix: remove class_name from InventoryManager to avoid autoload name conflict
This commit is contained in:
101
inventory/InventoryManager.gd
Normal file
101
inventory/InventoryManager.gd
Normal file
@@ -0,0 +1,101 @@
|
||||
extends Node
|
||||
|
||||
# Signals
|
||||
signal item_acquired(item_id: String)
|
||||
signal item_removed(item_id: String)
|
||||
signal inventory_changed
|
||||
signal combination_attempted(item_a_id: String, item_b_id: String)
|
||||
|
||||
# State
|
||||
var inventory: Array[String] = []
|
||||
var obtained_items: Dictionary = {}
|
||||
var stripped_items: Array[String] = []
|
||||
var selected_item: String = ""
|
||||
|
||||
# Item definitions registry
|
||||
var _item_definitions: Dictionary = {}
|
||||
|
||||
|
||||
# -- Queries --
|
||||
|
||||
func has_item(item_id: String) -> bool:
|
||||
return inventory.has(item_id)
|
||||
|
||||
func has_obtained(item_id: String) -> bool:
|
||||
return obtained_items.has(item_id)
|
||||
|
||||
func has_any_of(item_ids: Array[String]) -> bool:
|
||||
if item_ids.is_empty():
|
||||
return false
|
||||
for item_id in item_ids:
|
||||
if has_item(item_id):
|
||||
return true
|
||||
return false
|
||||
|
||||
func has_obtained_any_of(item_ids: Array[String]) -> bool:
|
||||
if item_ids.is_empty():
|
||||
return false
|
||||
for item_id in item_ids:
|
||||
if has_obtained(item_id):
|
||||
return true
|
||||
return false
|
||||
|
||||
func has_obtained_all_of(item_ids: Array[String]) -> bool:
|
||||
if item_ids.is_empty():
|
||||
return true
|
||||
for item_id in item_ids:
|
||||
if not has_obtained(item_id):
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
# -- Mutations --
|
||||
|
||||
func acquire_item(item_id: String) -> void:
|
||||
inventory.append(item_id)
|
||||
obtained_items[item_id] = true
|
||||
item_acquired.emit(item_id)
|
||||
inventory_changed.emit()
|
||||
|
||||
func remove_item(item_id: String, quiet: bool = false) -> void:
|
||||
var idx = inventory.find(item_id)
|
||||
if idx == -1:
|
||||
return
|
||||
inventory.remove_at(idx)
|
||||
if not quiet:
|
||||
item_removed.emit(item_id)
|
||||
inventory_changed.emit()
|
||||
|
||||
func bulk_strip_items(event_items: Array[String], exempt_items: Array[String] = []) -> void:
|
||||
var remaining: Array[String] = []
|
||||
for item_id in inventory:
|
||||
if event_items.has(item_id) and not exempt_items.has(item_id):
|
||||
stripped_items.append(item_id)
|
||||
else:
|
||||
remaining.append(item_id)
|
||||
inventory = remaining
|
||||
inventory_changed.emit()
|
||||
|
||||
|
||||
# -- Items --
|
||||
|
||||
func register_item(item_def: ItemDefinition) -> void:
|
||||
_item_definitions[item_def.id] = item_def
|
||||
|
||||
func get_item_definition(item_id: String) -> ItemDefinition:
|
||||
return _item_definitions.get(item_id, null)
|
||||
|
||||
|
||||
# -- Combinations --
|
||||
|
||||
func attempt_combine(item_a_id: String, item_b_id: String) -> void:
|
||||
combination_attempted.emit(item_a_id, item_b_id)
|
||||
|
||||
|
||||
# -- Selection --
|
||||
|
||||
func select_item(item_id: String) -> void:
|
||||
selected_item = item_id
|
||||
|
||||
func clear_selection() -> void:
|
||||
selected_item = ""
|
||||
Reference in New Issue
Block a user