red_dragon_pon/base/scripts/player/weapon_slot.gd

43 lines
975 B
GDScript

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():
var child_count = get_child_count()
has_weapon = child_count > 0
if has_weapon:
var child = get_child(child_count - 1)
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