Add battle turn audio cues

This commit is contained in:
2026-06-20 10:30:11 +09:00
parent aadf8b2f98
commit 3ef61316e2
2 changed files with 42 additions and 4 deletions

View File

@@ -9195,10 +9195,11 @@ func _update_hud() -> void:
func _update_auto_end_turn_prompt() -> void: func _update_auto_end_turn_prompt() -> void:
if auto_end_turn_prompt_panel == null: if auto_end_turn_prompt_panel == null:
return return
if _should_show_auto_end_turn_prompt(): var was_visible := auto_end_turn_prompt_panel.visible
auto_end_turn_prompt_panel.visible = true var should_show := _should_show_auto_end_turn_prompt()
return auto_end_turn_prompt_panel.visible = should_show
auto_end_turn_prompt_panel.visible = false if should_show and not was_visible:
_play_ui_confirm()
func _should_show_auto_end_turn_prompt() -> bool: func _should_show_auto_end_turn_prompt() -> bool:
@@ -10504,8 +10505,10 @@ func _format_hanja_number(value: int) -> String:
func _show_turn_notice_for_log(message: String) -> void: func _show_turn_notice_for_log(message: String) -> void:
if message == "적군 차례가 열렸습니다.": if message == "적군 차례가 열렸습니다.":
_play_sfx("guard_block", UI_SFX_VOLUME_DB)
_show_command_notice("적군 군령", "%d군령 · 적군 차례" % state.turn_number) _show_command_notice("적군 군령", "%d군령 · 적군 차례" % state.turn_number)
elif message == "아군 차례가 열렸습니다.": elif message == "아군 차례가 열렸습니다.":
_play_ui_confirm()
_show_command_notice("아군 군령", "%d군령 · 아군 차례" % state.turn_number) _show_command_notice("아군 군령", "%d군령 · 아군 차례" % state.turn_number)

View File

@@ -13,6 +13,7 @@ func _init() -> void:
_check_scene_post_move_scrolled_view_positioning(failures) _check_scene_post_move_scrolled_view_positioning(failures)
_check_scene_post_move_menu_tracks_map_scroll(failures) _check_scene_post_move_menu_tracks_map_scroll(failures)
_check_scene_input_audio_cues(failures) _check_scene_input_audio_cues(failures)
_check_scene_turn_notice_audio_cues(failures)
_check_scene_post_move_text_fit(failures) _check_scene_post_move_text_fit(failures)
_check_scene_post_move_blocked_command_labels(failures) _check_scene_post_move_blocked_command_labels(failures)
_check_scene_post_move_tactic_picker_flow(failures) _check_scene_post_move_tactic_picker_flow(failures)
@@ -84,6 +85,8 @@ func _check_deferred_move_events(failures: Array[String]) -> void:
func _check_auto_end_turn_prompt_flow(failures: Array[String]) -> void: func _check_auto_end_turn_prompt_flow(failures: Array[String]) -> void:
var scene = BattleSceneScript.new() var scene = BattleSceneScript.new()
scene._create_hud() scene._create_hud()
scene._create_audio()
scene.title_sfx_enabled = true
if not scene.state.load_battle("res://data/scenarios/001_yellow_turbans.json"): if not scene.state.load_battle("res://data/scenarios/001_yellow_turbans.json"):
failures.append("could not load opening battle for auto end turn prompt") failures.append("could not load opening battle for auto end turn prompt")
scene.free() scene.free()
@@ -115,11 +118,18 @@ func _check_auto_end_turn_prompt_flow(failures: Array[String]) -> void:
if str(unit.get("team", "")) == BattleStateScript.TEAM_PLAYER and bool(unit.get("alive", true)) and bool(unit.get("deployed", true)) and bool(unit.get("controllable", true)): if str(unit.get("team", "")) == BattleStateScript.TEAM_PLAYER and bool(unit.get("alive", true)) and bool(unit.get("deployed", true)) and bool(unit.get("controllable", true)):
unit["acted"] = true unit["acted"] = true
unit["moved"] = true unit["moved"] = true
scene.recent_sfx_keys.clear()
scene._update_hud() scene._update_hud()
if not scene.auto_end_turn_prompt_panel.visible: if not scene.auto_end_turn_prompt_panel.visible:
failures.append("auto end turn prompt should appear once every controllable ally has acted") failures.append("auto end turn prompt should appear once every controllable ally has acted")
if not scene._is_input_locked(): if not scene._is_input_locked():
failures.append("auto end turn prompt should lock board input while visible") failures.append("auto end turn prompt should lock board input while visible")
if not scene.recent_sfx_keys.has("menu_confirm"):
failures.append("auto end turn prompt should play a confirmation cue when it first appears: %s" % str(scene.recent_sfx_keys))
scene.recent_sfx_keys.clear()
scene._update_hud()
if not scene.recent_sfx_keys.is_empty():
failures.append("auto end turn prompt should not repeat audio while already visible: %s" % str(scene.recent_sfx_keys))
if not scene._handle_cancel_input(): if not scene._handle_cancel_input():
failures.append("right-click cancel should dismiss the auto end turn prompt") failures.append("right-click cancel should dismiss the auto end turn prompt")
@@ -142,6 +152,30 @@ func _check_auto_end_turn_prompt_flow(failures: Array[String]) -> void:
scene.free() scene.free()
func _check_scene_turn_notice_audio_cues(failures: Array[String]) -> void:
var scene = BattleSceneScript.new()
scene._create_hud()
scene._create_audio()
scene.title_sfx_enabled = true
scene.recent_sfx_keys.clear()
scene._on_log_added("적군 차례가 열렸습니다.")
if not scene.recent_sfx_keys.has("guard_block"):
failures.append("enemy turn notice should play a warning cue: %s" % str(scene.recent_sfx_keys))
scene.recent_sfx_keys.clear()
scene._on_log_added("아군 차례가 열렸습니다.")
if not scene.recent_sfx_keys.has("menu_confirm"):
failures.append("player turn notice should play a confirmation cue: %s" % str(scene.recent_sfx_keys))
scene.title_sfx_enabled = false
scene.recent_sfx_keys.clear()
scene._on_log_added("아군 차례가 열렸습니다.")
if not scene.recent_sfx_keys.is_empty():
failures.append("disabled SFX should suppress turn notice audio: %s" % str(scene.recent_sfx_keys))
scene.free()
func _check_scene_post_move_menu_flow(failures: Array[String]) -> void: func _check_scene_post_move_menu_flow(failures: Array[String]) -> void:
var scene = BattleSceneScript.new() var scene = BattleSceneScript.new()
scene._create_hud() scene._create_hud()
@@ -320,6 +354,7 @@ func _check_scene_input_audio_cues(failures: Array[String]) -> void:
var scene = BattleSceneScript.new() var scene = BattleSceneScript.new()
scene._create_hud() scene._create_hud()
scene._create_audio() scene._create_audio()
scene.title_sfx_enabled = true
if not scene.state.load_battle("res://data/scenarios/001_yellow_turbans.json"): if not scene.state.load_battle("res://data/scenarios/001_yellow_turbans.json"):
failures.append("could not load opening battle for input audio cues") failures.append("could not load opening battle for input audio cues")
scene.free() scene.free()