extends Node3D class_name WeaponSlot var has_weapon = false var weapon: Weapon ## Contains data about swapped weapons class WeaponSetData: ## New Weapon node, may be null var new_weapon: Weapon ## Old weapon id, may be empty string var old_weapon: StringName func _init(_new_weapon: Weapon, _old_weapon: StringName): new_weapon = _new_weapon old_weapon = _old_weapon func _ready(): has_weapon = get_child_count() > 0 if has_weapon: var child = get_child(0) assert(child is Weapon) weapon = child as Weapon func set_weapon(new_weapon: PackedScene) -> WeaponSetData: var weapon_inst = null if new_weapon != null: weapon_inst = new_weapon.instantiate() as Weapon add_child(weapon_inst) var old_weapon_id = drop_weapon() return WeaponSetData.new(weapon_inst, old_weapon_id) func drop_weapon() -> StringName: var id = "" if has_weapon: id = weapon.id weapon.queue_free() _ready() return id