44 lines
1.2 KiB
GDScript
44 lines
1.2 KiB
GDScript
extends MultiplayerSpawner
|
|
|
|
func _ready() -> void:
|
|
spawn_function = request_spawn
|
|
Session.dynamic_objects_spawner = self
|
|
|
|
func request_spawn(data: Variant) -> Node:
|
|
if is_multiplayer_authority() == false: return
|
|
if data.has("type") == false or data.has("spawn_name") == false:
|
|
return Node.new()
|
|
match data.type:
|
|
"weapon":
|
|
var weapon: DroppableWeapon = Registry.weapons[data.spawn_name].dropped_scene.instantiate()
|
|
weapon.apply_central_impulse(data.impulse)
|
|
weapon.weapon.ammo = data.ammo
|
|
weapon.weapon.remaining_ammo = data.remaining_ammo
|
|
weapon.slot = Registry.weapons[data.spawn_name].slot
|
|
|
|
for key in data.keys():
|
|
if key == "impulse" or key == "ammo" or key == "remaining_ammo":
|
|
continue
|
|
weapon.set(key,data[key])
|
|
|
|
return weapon
|
|
"projectile":
|
|
var projectile: RigidBody3D = Registry.spawnable_objects[data.spawn_name].instantiate()
|
|
projectile.apply_central_impulse(data.impulse)
|
|
|
|
for key in data.keys():
|
|
if key == "impulse":
|
|
continue
|
|
projectile.set(key,data[key])
|
|
|
|
return projectile
|
|
"object":
|
|
var object: Node3D = Registry.spawnable_objects[data.spawn_name].instantiate()
|
|
|
|
for key in data.keys():
|
|
object.set(key,data[key])
|
|
|
|
return object
|
|
_:
|
|
return Node.new()
|
|
|