42 lines
1.2 KiB
GDScript
42 lines
1.2 KiB
GDScript
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 = get_node("/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
|
|
)
|