32 lines
905 B
Plaintext
32 lines
905 B
Plaintext
|
|
extends Node3D
|
||
|
|
class_name ObjectSpawner
|
||
|
|
|
||
|
|
@export var Objects: Array[RandomObject]
|
||
|
|
@export var Parent: Node
|
||
|
|
var weightArray: PackedFloat32Array
|
||
|
|
var rng = RandomNumberGenerator.new()
|
||
|
|
|
||
|
|
|
||
|
|
func _ready():
|
||
|
|
if Objects.is_empty(): return
|
||
|
|
|
||
|
|
var spaceship = get_node("/root/Main/Maps/Spaceship")
|
||
|
|
for obj in Objects: #Init weight array
|
||
|
|
weightArray.push_back(obj.probability)
|
||
|
|
|
||
|
|
var objectReference = load(Objects[rng.rand_weighted(weightArray)].dir) #Get random Object depending on weights
|
||
|
|
var ObjectInstance = objectReference.instantiate()
|
||
|
|
|
||
|
|
if Parent:
|
||
|
|
Parent.call_deferred("add_child",ObjectInstance) #Adds Object instance
|
||
|
|
elif spaceship:
|
||
|
|
spaceship.call_deferred("add_child",ObjectInstance)
|
||
|
|
else:
|
||
|
|
push_error("Object Spawner failed to spawn object because of missing parent node")
|
||
|
|
|
||
|
|
ObjectInstance.rotation = self.global_rotation
|
||
|
|
ObjectInstance.position = self.global_position
|
||
|
|
|
||
|
|
self.queue_free()
|
||
|
|
|