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()))