From e69f8921e6119c67077c3e245c75484dd7cd99e6 Mon Sep 17 00:00:00 2001 From: JiWoong Sul Date: Wed, 31 Dec 2025 00:20:23 +0900 Subject: [PATCH] =?UTF-8?q?fix(game):=20=EA=B2=8C=EC=9E=84=20=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=20=ED=99=94=EB=A9=B4=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 애니메이션 관련 코드 정리 - 레이아웃 조정 --- lib/src/features/game/game_play_screen.dart | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/src/features/game/game_play_screen.dart b/lib/src/features/game/game_play_screen.dart index cebc40b..4429437 100644 --- a/lib/src/features/game/game_play_screen.dart +++ b/lib/src/features/game/game_play_screen.dart @@ -255,6 +255,7 @@ class _GamePlayScreenState extends State /// TaskType 기반 BGM 전환 (애니메이션과 동기화) /// /// 애니메이션은 TaskType으로 결정되므로, BGM도 동일한 기준 사용 + /// 전환 감지 외에도 현재 BGM이 TaskType과 일치하는지 검증 void _updateBgmForTaskType(GameState state) { final audio = widget.audioService; if (audio == null) return; @@ -262,19 +263,20 @@ class _GamePlayScreenState extends State final taskType = state.progress.currentTask.type; final isInBattleTask = taskType == TaskType.kill; - if (isInBattleTask && !_wasInBattleTask) { - // 전투 태스크 시작: 보스 여부에 따라 BGM 선택 + // 전투 태스크 상태 결정 + if (isInBattleTask) { + // 전투 태스크: 보스 여부에 따라 BGM 선택 final monsterLevel = state.progress.currentTask.monsterLevel ?? 0; final playerLevel = state.traits.level; final isBoss = monsterLevel >= playerLevel + 5; + final expectedBgm = isBoss ? 'boss' : 'battle'; - if (isBoss) { - audio.playBgm('boss'); - } else { - audio.playBgm('battle'); + // 전환 시점이거나 현재 BGM이 일치하지 않으면 재생 + if (!_wasInBattleTask || audio.currentBgm != expectedBgm) { + audio.playBgm(expectedBgm); } - } else if (!isInBattleTask && _wasInBattleTask) { - // 전투 태스크 종료: 마을 BGM으로 복귀 + } else if (_wasInBattleTask || audio.currentBgm == 'battle' || audio.currentBgm == 'boss') { + // 전투 태스크 종료 또는 BGM 불일치: 마을 BGM으로 복귀 audio.playBgm('town'); } @@ -675,6 +677,7 @@ class _GamePlayScreenState extends State MaterialPageRoute( builder: (_) => GamePlayScreen( controller: widget.controller, + audioService: widget.audioService, currentThemeMode: widget.currentThemeMode, onThemeModeChange: widget.onThemeModeChange, ), @@ -784,6 +787,7 @@ class _GamePlayScreenState extends State MaterialPageRoute( builder: (_) => GamePlayScreen( controller: widget.controller, + audioService: widget.audioService, currentThemeMode: widget.currentThemeMode, onThemeModeChange: widget.onThemeModeChange, ),