43 lines
975 B
GDScript
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
|