60 lines
2.7 KiB
GDScript
60 lines
2.7 KiB
GDScript
extends Node3D
|
|
@export_category("Parameters")
|
|
@export var obj_scale: float = 0.2
|
|
@export var launch_magnitude: float = 5
|
|
@export var obj_interval = 0.5
|
|
@export var obj_range = 0.2
|
|
@export_category("Mesh")
|
|
@export var mesh_type: Mesh = BoxMesh.new()
|
|
@export var mesh_color: Color = Color("FFFFFF")
|
|
@export var mesh_texture: Texture2D
|
|
@export var triplanar: bool = true
|
|
@export var world_triplanar: bool = false
|
|
#@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
|
|
|
|
var shape_match = {"SphereMesh": SphereShape3D.new(), "BoxMesh": BoxShape3D.new(),"CapsuleMesh": CapsuleShape3D.new(), "TextMesh": BoxShape3D.new()}
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
|
|
##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
|
|
var rigid_debris = RigidBody3D.new()
|
|
##Make it so player is not impeded by debris but debris is moved around by player
|
|
self.add_child(rigid_debris)
|
|
rigid_debris.add_to_group("mess")
|
|
rigid_debris.continuous_cd = true
|
|
##Set by bit values (ex. just layer 1 (0 or 1), just layer 2 (2), layer 1 and 2 (3), just layer 4 (4)
|
|
rigid_debris.collision_layer = 2
|
|
rigid_debris.collision_mask = 1
|
|
rigid_debris.add_child(MeshInstance3D.new())
|
|
rigid_debris.get_child(0).mesh = mesh_type
|
|
rigid_debris.add_child(CollisionShape3D.new())
|
|
rigid_debris.get_child(1).shape = shape_match[str(mesh_type.get_class())]
|
|
rigid_debris.get_child(0).mesh.material = StandardMaterial3D.new()
|
|
rigid_debris.get_child(0).mesh.material.albedo_color = mesh_color
|
|
if mesh_texture != null:
|
|
rigid_debris.get_child(0).mesh.material.albedo_texture = mesh_texture
|
|
rigid_debris.get_child(0).mesh.material.uv1_triplanar = triplanar
|
|
rigid_debris.get_child(0).mesh.material.uv1_world_triplanar = world_triplanar
|
|
rigid_debris.get_child(0).mesh.material.texture_filter = 0
|
|
for children in rigid_debris.get_children():
|
|
children.scale = Vector3(obj_scale,obj_scale,obj_scale)
|
|
var velocity = Vector3(randf_range(-1 * obj_range,obj_range), 0, randf_range(-1 * obj_range,obj_range)) * launch_magnitude
|
|
var ang_velocity = Vector3(randf_range(-1 * obj_range,obj_range), 0, randf_range(-1 * obj_range,obj_range)) * (launch_magnitude / 2)
|
|
##Direction
|
|
rigid_debris.linear_velocity = velocity
|
|
##Spin
|
|
rigid_debris.angular_velocity = ang_velocity
|
|
|
|
set_physics_process(false)
|
|
await(get_tree().create_timer(obj_interval, false).timeout)
|
|
set_physics_process(true)
|