62 lines
2.7 KiB
GDScript
62 lines
2.7 KiB
GDScript
extends Node
|
|
|
|
func _ready() -> void:
|
|
GameState.start_new_run()
|
|
var game := preload("res://scenes/game/game.tscn").instantiate()
|
|
add_child(game)
|
|
await get_tree().process_frame
|
|
var manager := game.get_node("PlanetExpeditions")
|
|
var music: AudioStreamPlayer = game.get_node("GameMusic")
|
|
var original_buses := AudioServer.bus_count
|
|
for visit in 3:
|
|
manager.open_freighter()
|
|
var screen: Control = manager.screen
|
|
var audio: Node = screen.get_node("FreighterAudio")
|
|
assert(get_tree().paused and audio.can_process())
|
|
assert(audio._streams.size() == 15)
|
|
assert(audio._beds.size() == 2 and audio._voices.size() == 4)
|
|
assert(AudioServer.bus_count == original_buses+4)
|
|
for id in audio._streams:
|
|
var stream: AudioStream = audio._streams[id]
|
|
assert(stream != null and stream.get_length() > 0.1)
|
|
for bed in audio._beds:
|
|
assert(bed.stream.loop_mode == AudioStreamWAV.LOOP_FORWARD)
|
|
assert(bed.stream.loop_end > bed.stream.loop_begin)
|
|
assert(bed.playing and not bed.stream_paused)
|
|
var music_before := music.get_playback_position()
|
|
var bed_before: float = audio._beds[0].get_playback_position()
|
|
await get_tree().create_timer(0.25,true).timeout
|
|
assert(music.get_playback_position() > music_before)
|
|
assert(audio._beds[0].get_playback_position() > bed_before)
|
|
screen._select_section("workshop")
|
|
var actions: int = audio.played_count
|
|
screen._select_section("workshop")
|
|
screen._hover_section("hangar")
|
|
assert(audio.played_count == actions,"Repeated clicks and hover must not spam doors")
|
|
audio._next_tool = audio._elapsed
|
|
audio._process(0.1)
|
|
assert(audio._last_tool != "")
|
|
for index in 20: audio.play_effect("metal_1",0,-20,true)
|
|
assert(audio._voices.size() == 4,"Rapid actions must keep bounded polyphony")
|
|
for voice in audio._voices: voice.stop()
|
|
audio.set_maintenance_needed(true)
|
|
audio._next_tool = INF
|
|
audio._next_console = INF
|
|
audio._next_pressure = INF
|
|
audio._process(4.1)
|
|
assert(is_inf(audio._alarm_due))
|
|
var warnings: int = audio.played_count
|
|
audio._process(1.0)
|
|
assert(audio.played_count == warnings,"No repeated false emergency loop")
|
|
audio.set_maintenance_needed(false)
|
|
assert(is_inf(audio._alarm_due))
|
|
screen.closed.emit()
|
|
assert(not get_tree().paused)
|
|
assert(AudioServer.bus_count == original_buses,"All temporary panning buses must be removed on departure")
|
|
assert(music.playing and not music.stream_paused)
|
|
await get_tree().process_frame
|
|
game.queue_free()
|
|
await get_tree().process_frame
|
|
print("FREIGHTER AUDIO PASS: 15 streams, seamless loop configuration, paused playback with uninterrupted music, room foley, hover/click debounce, bounded voices, one maintenance warning, cleanup across three docking visits")
|
|
get_tree().quit()
|