30 lines
769 B
GDScript
30 lines
769 B
GDScript
class_name WeaponSlot
|
|
extends Node3D
|
|
|
|
@export var allowed_sizes: Array[WeaponDef.Size] = [WeaponDef.Size.MEDIUM]
|
|
@export var allowed_types: Array[WeaponDef.Type] = [WeaponDef.Type.BALLISTIC]
|
|
|
|
var weapon: Weapon = null # currently mounted, if any
|
|
|
|
func can_mount(def: WeaponDef) -> bool:
|
|
return def != null and def.weapon_scene != null \
|
|
and def.size in allowed_sizes and def.type in allowed_types
|
|
|
|
func mount(def: WeaponDef) -> bool:
|
|
if not can_mount(def):
|
|
push_warning("%s can't mount %s" % [
|
|
name,
|
|
def.display_name if def != null else "<null def>"
|
|
])
|
|
return false
|
|
unmount()
|
|
weapon = def.weapon_scene.instantiate()
|
|
weapon.def = def
|
|
add_child(weapon)
|
|
return true
|
|
|
|
func unmount() -> void:
|
|
if weapon != null:
|
|
weapon.queue_free()
|
|
weapon = null
|