extends SceneTree var checks: int = 0 var failures: int = 0 func _initialize() -> void: call_deferred("run") func check(condition: bool, message: String) -> void: checks += 1 if not condition: failures += 1 push_error(message) func run() -> void: var player := OwniverseEffectsPlayer.new() root.add_child(player) check(player.play_effect("select"), "Known effect starts") check(player.stream == player._effects.select and player.playing, "Selected effect is playing") var selected_stream: AudioStream = player.stream check(not player.play_effect("select"), "Playing effect is not restarted") check(player.stream == selected_stream and player.playing, "Rejected duplicate keeps current playback") player.stop() check(not player.play_effect("select"), "Named effect is rejected during its two-second cooldown") check(player.play_effect("blast"), "Different effect starts without waiting for another name") player.stop() player._last_played_msec.select -= player.EFFECT_COOLDOWN_MSEC check(player.play_effect("select"), "Named effect starts after its cooldown") check(not player.play_effect("missing_effect"), "Unknown effect is rejected") check(player.stream == player._effects.select, "Unknown effect does not interrupt playback") player.set_enabled(false) check(player.stream_paused, "Disabling effects pauses current playback") check(not player.play_effect("blast") and player.stream == player._effects.select, "Disabled player rejects new effects") player.set_enabled(true) check(not player.stream_paused, "Enabling effects resumes current playback") player.stop() player.stream = null player.free() await process_frame print("Effects player: %d checks, %d failures" % [checks, failures]) quit(0 if failures == 0 else 1)