REM/scripts/debris_generator.gd
2026-03-26 20:37:29 -06:00

64 lines
2.4 KiB
GDScript

extends Node3D
@export var debris_scale: float = 0.2
@export var launch_magnitude: float = 5
@onready var debris_sounds: AudioStreamPlayer3D = $DebrisSounds
@onready var fade_out_time = $DebrisSounds.stream.get_length() - 0.05
@onready var default_volume = debris_sounds.volume_db
func generate_debris(demo_site, object_size, material, _mode):
var debris_count: int
##Calculate the amount of debris based on the object type
if is_instance_of(object_size, TYPE_VECTOR3):
debris_count = round((object_size.x * object_size.y * object_size.z) / pow(debris_scale,3))
elif is_instance_of(object_size, TYPE_FLOAT):
debris_count = round(object_size / pow(debris_scale,3))
#self.global_position = demo_site
#print("debris generator: " + str(self.position))
#print("obj_size: " + str(object_size))
print(debris_count)
##Play the debris sound and tween it so it fades out
debris_sounds.volume_db = default_volume
var tween = create_tween()
##Object, Property, Target Volume (between -60 and -80 in silent), Time
tween.tween_property(debris_sounds, "volume_db", -60, fade_out_time)
debris_sounds.play()
##Make the debris generator
var debris_generator = Node3D.new()
debris_generator.position = demo_site
debris_generator.add_to_group("mess")
get_node("/root").add_child(debris_generator)
##Make the debris
for i in debris_count:
#print("making_debris")
var rigid_debris = RigidBody3D.new()
##Add debris as child to debris generator
debris_generator.add_child(rigid_debris)
##Make it so player is not impeded by debris but debris is moved around by player
rigid_debris.collision_layer = 2
rigid_debris.add_child(MeshInstance3D.new())
rigid_debris.get_child(0).mesh = BoxMesh.new()
rigid_debris.add_child(CollisionShape3D.new())
rigid_debris.get_child(1).shape = BoxShape3D.new()
rigid_debris.get_child(0).mesh.material = material
for children in rigid_debris.get_children():
children.scale = Vector3(debris_scale,debris_scale,debris_scale)
var velocity = Vector3(randf_range(-1,1), randf_range(0,1), randf_range(-1,1)) * launch_magnitude
var ang_velocity = Vector3(randf_range(-1,1), randf_range(0,1), randf_range(-1,1)) * (launch_magnitude / 2)
##Direction
rigid_debris.linear_velocity = velocity
##Spin
rigid_debris.angular_velocity = ang_velocity
if i == debris_count - 1:
pass
#print("debris instance: " + str(debris_generator.position))
#print("groups: " + str(debris_generator.get_groups()))