diff --git a/scenes/elevator_panel.gd b/scenes/elevator_panel.gd index 57c78cc..b239648 100644 --- a/scenes/elevator_panel.gd +++ b/scenes/elevator_panel.gd @@ -19,14 +19,6 @@ var points_per_person := 100 # base + bonus per person above threshold var people_in_elevator := 0 -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] -var _last_chase: AudioStream = null -var _chase_tween: Tween = null - func _ready(): var button = $PanelMargin/PanelColumn/CloseButton button.text = "BLOCK" @@ -60,7 +52,6 @@ func _start_floor(): var screen = $PanelMargin/PanelColumn/Screen screen.start() screen.launch_pulse() # first survivor arrives - _start_chase() # --- Input --- @@ -72,7 +63,6 @@ func _on_block_pressed(): # --- Pulse callbacks --- func _on_pulse_blocked(): - _stop_chase() # This survivor made it in survivors_remaining -= 1 people_in_elevator += 1 @@ -91,8 +81,7 @@ func _on_pulse_blocked(): get_tree().create_timer(gap).timeout.connect( func(): if not doors_closing_flag: - screen.launch_pulse() - _start_chase(), + screen.launch_pulse(), CONNECT_ONE_SHOT ) @@ -101,8 +90,6 @@ func _on_doors_closing(): return doors_closing_flag = true - _stop_chase() - var screen = $PanelMargin/PanelColumn/Screen # Lose: not enough people @@ -137,22 +124,3 @@ func _on_doors_closing(): var tween = create_tween() tween.tween_interval(2.0) tween.tween_callback(_start_floor) - -func _start_chase(): - if _chase_tween and _chase_tween.is_valid(): - _chase_tween.kill() - - var candidates: Array = CHASE_TRACKS.filter(func(s): return s != _last_chase) - var stream: AudioStream = candidates[randi() % candidates.size()] - _last_chase = stream - - $SfxChase.stream = stream - $SfxChase.volume_db = 0.0 - $SfxChase.play() - -func _stop_chase(): - if _chase_tween and _chase_tween.is_valid(): - _chase_tween.kill() - _chase_tween = create_tween() - _chase_tween.tween_property($SfxChase, "volume_db", -80.0, 0.3) - _chase_tween.tween_callback($SfxChase.stop) diff --git a/scenes/survivor.gd b/scenes/survivor.gd index 5e419d7..253e79f 100644 --- a/scenes/survivor.gd +++ b/scenes/survivor.gd @@ -1,5 +1,12 @@ 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 @@ -10,6 +17,17 @@ var clumsiness: int = 0 #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 * delta move_and_slide() diff --git a/scenes/survivor.tscn b/scenes/survivor.tscn index c5ac69a..c064cbf 100644 --- a/scenes/survivor.tscn +++ b/scenes/survivor.tscn @@ -55,4 +55,6 @@ frame_progress = 0.99938977 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.080844045, -0.14428711) shape = SubResource("BoxShape3D_7yc2n") +[node name="ScreamPlayer" type="AudioStreamPlayer3D" parent="."] + [connection signal="area_entered" from="Area3D" to="." method="_on_area_3d_area_entered"]