36 lines
1,008 B
GDScript
36 lines
1,008 B
GDScript
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)
|