64 lines
2.4 KiB
GDScript
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()))
|
|
|