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

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)