fix(game): 게임 플레이 화면 로직 개선

- 애니메이션 관련 코드 정리
- 레이아웃 조정
This commit is contained in:
JiWoong Sul
2025-12-31 00:20:23 +09:00
parent 5d58239313
commit e69f8921e6

View File

@@ -255,6 +255,7 @@ class _GamePlayScreenState extends State<GamePlayScreen>
/// TaskType 기반 BGM 전환 (애니메이션과 동기화) /// TaskType 기반 BGM 전환 (애니메이션과 동기화)
/// ///
/// 애니메이션은 TaskType으로 결정되므로, BGM도 동일한 기준 사용 /// 애니메이션은 TaskType으로 결정되므로, BGM도 동일한 기준 사용
/// 전환 감지 외에도 현재 BGM이 TaskType과 일치하는지 검증
void _updateBgmForTaskType(GameState state) { void _updateBgmForTaskType(GameState state) {
final audio = widget.audioService; final audio = widget.audioService;
if (audio == null) return; if (audio == null) return;
@@ -262,19 +263,20 @@ class _GamePlayScreenState extends State<GamePlayScreen>
final taskType = state.progress.currentTask.type; final taskType = state.progress.currentTask.type;
final isInBattleTask = taskType == TaskType.kill; final isInBattleTask = taskType == TaskType.kill;
if (isInBattleTask && !_wasInBattleTask) { // 전투 태스크 상태 결정
// 전투 태스크 시작: 보스 여부에 따라 BGM 선택 if (isInBattleTask) {
// 전투 태스크: 보스 여부에 따라 BGM 선택
final monsterLevel = state.progress.currentTask.monsterLevel ?? 0; final monsterLevel = state.progress.currentTask.monsterLevel ?? 0;
final playerLevel = state.traits.level; final playerLevel = state.traits.level;
final isBoss = monsterLevel >= playerLevel + 5; final isBoss = monsterLevel >= playerLevel + 5;
final expectedBgm = isBoss ? 'boss' : 'battle';
if (isBoss) { // 전환 시점이거나 현재 BGM이 일치하지 않으면 재생
audio.playBgm('boss'); if (!_wasInBattleTask || audio.currentBgm != expectedBgm) {
} else { audio.playBgm(expectedBgm);
audio.playBgm('battle');
} }
} else if (!isInBattleTask && _wasInBattleTask) { } else if (_wasInBattleTask || audio.currentBgm == 'battle' || audio.currentBgm == 'boss') {
// 전투 태스크 종료: 마을 BGM으로 복귀 // 전투 태스크 종료 또는 BGM 불일치: 마을 BGM으로 복귀
audio.playBgm('town'); audio.playBgm('town');
} }
@@ -675,6 +677,7 @@ class _GamePlayScreenState extends State<GamePlayScreen>
MaterialPageRoute<void>( MaterialPageRoute<void>(
builder: (_) => GamePlayScreen( builder: (_) => GamePlayScreen(
controller: widget.controller, controller: widget.controller,
audioService: widget.audioService,
currentThemeMode: widget.currentThemeMode, currentThemeMode: widget.currentThemeMode,
onThemeModeChange: widget.onThemeModeChange, onThemeModeChange: widget.onThemeModeChange,
), ),
@@ -784,6 +787,7 @@ class _GamePlayScreenState extends State<GamePlayScreen>
MaterialPageRoute<void>( MaterialPageRoute<void>(
builder: (_) => GamePlayScreen( builder: (_) => GamePlayScreen(
controller: widget.controller, controller: widget.controller,
audioService: widget.audioService,
currentThemeMode: widget.currentThemeMode, currentThemeMode: widget.currentThemeMode,
onThemeModeChange: widget.onThemeModeChange, onThemeModeChange: widget.onThemeModeChange,
), ),