extends CharacterBody3D const CHASE_SHORT_1 := preload("res://audio/Shortchase1.wav") const CHASE_SHORT_2 := preload("res://audio/Shortchase2.wav") const CHASE_MID := preload("res://audio/Midchase1.wav") const CHASE_LONG := preload("res://audio/Chase1.wav") const CHASE_TRACKS := [CHASE_SHORT_1, CHASE_SHORT_2, CHASE_MID, CHASE_LONG] static var _last_chase: AudioStream = null var speed: int = 3 var clumsiness: int = 0 var _saved: bool = false @onready var safety_zone: Node = get_node_or_null("/root/Game/World/ElevatorSafeZone") #func start(xform): #transform = xform #velocity = (-xform.basis.z * speed).rotated(Vector3.UP, randf_range(-PI/4, PI/4)) func _ready(): var candidates: Array = CHASE_TRACKS.filter(func(s): return s != _last_chase) var stream: AudioStream = candidates[randi() % candidates.size()] _last_chase = stream $ScreamPlayer.stream = stream var delay := randf_range(0.0, 0.5) get_tree().create_timer(delay).timeout.connect( func(): $ScreamPlayer.play(), CONNECT_ONE_SHOT ) func _physics_process(_delta): velocity.z = -speed move_and_slide() func _on_area_3d_area_entered(area: Area3D) -> void: if area == safety_zone and not _saved: _saved = true get_tree().create_timer(0.5).timeout.connect( func(): queue_free(), CONNECT_ONE_SHOT )