extends ColorRect # Reference to child slots @onready var slots = get_children() # Dictionary to store items associated with their respective slots var items = {} # Signals for item-related events signal weapon_equipped(weapon_id, item) signal weapon_unequipped(weapon_id, item) func _ready(): # Initialize the items dictionary with slots for slot in slots: items[slot.name] = null # Function to insert an item into the equipment slots func insert_item(item): # Calculate the center position of the item var item_pos = item.global_position + item.size / 2 # Get the slot under the item's position var slot = get_slot_under_pos(item_pos) # Check if the item can be inserted into the slot if slot == null: return false # Retrieve item slot information from the ItemDb var item_slot = ItemDb.get_item(item.get_meta("id")).item_equipment_slot # Check if the item's slot matches the target slot if item_slot != slot.name: return false # Check if the slot is already occupied if items[item_slot] != null: return false # Place the item in the slot and emit the weapon_equipped signal items[item_slot] = item item.global_position = slot.global_position + slot.size / 2 - item.size / 2 weapon_equipped.emit(item.item_config.item_id, item.item_config) return true # Function to grab an item from the equipment slots func grab_item(pos): # Get the item under the specified position var item = get_item_under_pos(pos) if item == null: return null # Retrieve item slot information from the ItemDb var item_slot = ItemDb.get_item(item.get_meta("id")).item_equipment_slot # Remove the item from the slot and emit the weapon_unequipped signal items[item_slot] = null weapon_unequipped.emit(item.item_config.item_id, item.item_config) return item # Function to get the slot under a specified position func get_slot_under_pos(pos): return get_thing_under_pos(slots, pos) # Function to get the item under a specified position func get_item_under_pos(pos): return get_thing_under_pos(items.values(), pos) # Generic function to get the object (slot or item) under a specified position func get_thing_under_pos(arr, pos): for thing in arr: if thing != null and thing.get_global_rect().has_point(pos): return thing return null