extends CharacterBody3D @export var speed: float @export_range(0,1,1,"or_less","or_greater","radians_as_degrees") var rotation_speed: float @export var death_delay: float @export var sound_pitch_min: float @export var sound_pitch_max: float @export_group("Node References") @export var model: Node3D @export var death_sound: AudioStreamPlayer3D func _ready() -> void: velocity = global_basis.z * speed rotation = Vector3.ZERO func _physics_process(delta: float) -> void: model.global_rotation.y = wrapf(Time.get_ticks_msec() * 0.001 * rotation_speed, 0.0, TAU) var col = move_and_collide(velocity * delta) if col: if col.get_collider() is Player: queue_free() velocity = velocity.bounce(col.get_normal()) func _on_player_detector_body_entered(body: Node3D) -> void: if body is Player: model.visible = false death_sound.pitch_scale = randf_range(sound_pitch_min, sound_pitch_max) death_sound.play() get_tree().create_timer(death_delay, false, true).timeout.connect(queue_free)