extends Resource class_name Inventory signal inventory_changed(inventory: Inventory) @export var items: Array[Item] = [] @export var max_items: int = 3 var current_item_ind: int = 0 func set_current_item(new_ind: int): if new_ind >= length(): return if new_ind != current_item_ind: current_item_ind = new_ind emit_signal("inventory_changed", self) func change_current_item(ind_mod: int): if length() == 0: current_item_ind = 0 return var new_ind : int = current_item_ind + ind_mod new_ind = new_ind % length() if new_ind < 0: new_ind += length() set_current_item(new_ind) func add_item(item: Item): if items.size() < max_items: items.append(item) emit_signal("inventory_changed", self) return true else: return false func add_items(items_to_add: Array[Item], fillup: bool = false): if fillup: var has_changed := false for i in min(items_to_add.size(), max_items - items.size()): items.append(items_to_add[i]) has_changed = true if has_changed: emit_signal("inventory_changed", self) return has_changed elif !fillup && items.size() + items_to_add.size() < max_items: items.append_array(items_to_add) emit_signal("inventory_changed", self) return true func length() -> int: return len(items) func set_item(item: Item, ind: int = 0) -> bool: if ind >= max_items: return false while len(items) <= ind: items.append(null) items[ind] = item emit_signal("inventory_changed", self) return true func get_item(ind: int = current_item_ind) -> Item: if len(items) <= ind: return null return items[ind] func has_item(item: Item) -> bool: return item in items func remove_item(item: Item): items.erase(item) emit_signal("inventory_changed", self) func remove_item_at(ind: int = current_item_ind): if len(items) <= ind: return items.remove_at(ind) if current_item_ind >= length(): change_current_item(-1) emit_signal("inventory_changed", self) func remove_current_item(): remove_item_at() func pop_item(ind: int = current_item_ind) -> Item: if length() == 0: return var item_removed: Item = items.pop_at(ind) if current_item_ind >= length(): change_current_item(-1) emit_signal("inventory_changed", self) return item_removed func swap_items(item_to_add: Item, ind_to_get: int = current_item_ind) -> Item: var item_to_get := items[ind_to_get] items[ind_to_get] = item_to_add emit_signal("inventory_changed", self) return item_to_get