Refactor audio effect handling: remove cooldown logic and enhance sound playback functionality

This commit is contained in:
Kirill
2026-10-03 13:36:33 +03:00
parent 9e13c8bbe3
commit 6f6a1be3bd
8 changed files with 58 additions and 22 deletions
+4 -7
View File
@@ -25,17 +25,14 @@ func run() -> void:
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(player.play_effect("select"), "Stopped effect can start again immediately")
check(player.play_effect("blast"), "Different effect starts immediately")
check(not player.play_effect("missing_effect"), "Unknown effect is rejected")
check(player.stream == player._effects.select, "Unknown effect does not interrupt playback")
check(player.stream == player._effects.blast, "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")
check(not player.play_effect("select") and player.stream == player._effects.blast, "Disabled player rejects new effects")
player.set_enabled(true)
check(not player.stream_paused, "Enabling effects resumes current playback")
+13 -2
View File
@@ -176,8 +176,19 @@ func run() -> void:
world.state.amount.Met = 100
world.state.auto_resources.H = 100
world.evolute(E.of("0.1"))
check((E.eq(world.state.amount.RD, 101) and E.eq(world.state.amount.H, 0)), "Automatic formation uses its resource budget")
check(E.ge(world.state.binds.RD.HP, 1), "Automatic formation also creates planets")
check((E.eq(world.state.amount.RD, 1) and E.eq(world.state.amount.H, 100)), "Automatic formation cannot spend hydrogen retained from an earlier cycle")
check(E.eq(world.state.auto_resources.get("H", 0), 0), "Unused automatic hydrogen becomes an ordinary free resource")
dispose(world)
world = fixture()
world.catalog.entities.N.auto = 1
world.state.amount.RD = 1
world.state.amount.H = 100
world.state.amount.Met = 100
world.evolute(100)
check(E.gt(world.state.amount.RD, 1), "Automatic formation can spend newly produced hydrogen")
check(E.ge(world.state.amount.H, 100), "Automatic formation preserves hydrogen available before the cycle")
check(E.ge(world.state.binds.get("RD", {}).get("HP", 0), 1), "Automatic formation also creates planets")
dispose(world)
world = fixture()
+11
View File
@@ -21,6 +21,7 @@ func run() -> void:
root.add_child(scene)
await process_frame
await process_frame
check(stage.effects_player.stream == null, "Startup does not play a UI sound")
stage.stage_page_scroller.scroll_horizontal = stage.PAGE_WIDTH
await process_frame
stage.owniverse.state.amount.H = 1000
@@ -54,6 +55,16 @@ func run() -> void:
stage.owniverse.state.time.year = E.of("1234.5")
stage._refresh_universe_ui()
check(E.eq(stage.date_time.text, "1 234.5"), "Time displays tenths with thousands separator")
stage.effects_player.set_enabled(true)
stage.owniverse.speed = 1
stage._change_speed(1)
check(stage.effects_player.stream == stage.effects_player._effects.time_plus, "Increasing speed plays its effect")
stage._change_speed(-1)
check(stage.effects_player.stream == stage.effects_player._effects.time_minus, "Decreasing speed plays its effect")
stage._on_topmenu_button_pressed("MainMenu")
check(stage.effects_player.stream == stage.effects_player._effects.window_open, "Opening a window plays its effect")
stage._on_topmenu_button_pressed("World")
check(stage.effects_player.stream == stage.effects_player._effects.window_close, "Closing a window plays its effect")
for entity in stage.owniverse.catalog.entities.values(): entity.free()
stage.owniverse.free()
scene.free()