From 431dd995bf1896313a513fee3bc120076c6376c0 Mon Sep 17 00:00:00 2001 From: JiWoong Sul Date: Fri, 26 Dec 2025 00:57:47 +0900 Subject: [PATCH] =?UTF-8?q?fix(game):=20=EB=B6=80=ED=99=9C=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EB=B0=8F=20=EA=B2=8C=EC=9E=84=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20UI=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/src/core/engine/resurrection_service.dart | 15 ++++++++++----- lib/src/features/game/game_play_screen.dart | 17 +++++++++++------ .../features/game/widgets/cinematic_view.dart | 4 ++-- lib/src/features/game/widgets/combat_log.dart | 2 +- .../features/game/widgets/death_overlay.dart | 4 ++-- .../new_character/widgets/race_preview.dart | 2 +- 6 files changed, 27 insertions(+), 17 deletions(-) diff --git a/lib/src/core/engine/resurrection_service.dart b/lib/src/core/engine/resurrection_service.dart index 02b29ae..68e2285 100644 --- a/lib/src/core/engine/resurrection_service.dart +++ b/lib/src/core/engine/resurrection_service.dart @@ -155,16 +155,21 @@ class ResurrectionService { ]; // 기존 큐 초기화 후 부활 시퀀스만 설정 + // 첫 번째 태스크를 현재 태스크로 설정하여 즉시 표시 + final firstTask = resurrectionQueue.removeAt(0); nextState = nextState.copyWith( queue: QueueState( - entries: resurrectionQueue, // 기존 큐 완전 제거 + entries: resurrectionQueue, // 나머지 큐 ), - // 현재 태스크를 빈 상태로 설정하여 큐에서 다음 태스크를 가져오도록 함 + // 첫 번째 태스크를 현재 태스크로 직접 설정 progress: nextState.progress.copyWith( - currentTask: const TaskInfo(caption: '', type: TaskType.neutral), - task: const ProgressBarState( + currentTask: TaskInfo( + caption: firstTask.caption, + type: firstTask.taskType, + ), + task: ProgressBarState( position: 0, - max: 1, // 즉시 완료되어 큐에서 다음 태스크 가져옴 + max: firstTask.durationMillis, ), currentCombat: null, // 전투 상태 명시적 초기화 ), diff --git a/lib/src/features/game/game_play_screen.dart b/lib/src/features/game/game_play_screen.dart index 92121ed..53e2da8 100644 --- a/lib/src/features/game/game_play_screen.dart +++ b/lib/src/features/game/game_play_screen.dart @@ -532,11 +532,14 @@ class _GamePlayScreenState extends State ); Future.delayed(Duration(milliseconds: duration), () async { if (mounted) { - setState(() { - _specialAnimation = null; - }); - // 부활 후 게임 재개 (새 루프 시작) + // 먼저 게임 재개 (status를 running으로 변경) + // 이렇게 해야 setState 시 UI가 '일시정지' 상태로 보이지 않음 await widget.controller.resumeAfterResurrection(); + if (mounted) { + setState(() { + _specialAnimation = null; + }); + } } }); } @@ -578,7 +581,8 @@ class _GamePlayScreenState extends State widget.controller.loop?.cycleSpeed(); setState(() {}); }, - isPaused: !widget.controller.isRunning, + // 특수 애니메이션 중에는 일시정지 상태로 표시하지 않음 + isPaused: !widget.controller.isRunning && _specialAnimation == null, onPauseToggle: () async { await widget.controller.togglePause(); setState(() {}); @@ -702,7 +706,8 @@ class _GamePlayScreenState extends State widget.controller.loop?.cycleSpeed(); setState(() {}); }, - isPaused: !widget.controller.isRunning, + // 특수 애니메이션 중에는 일시정지 상태로 표시하지 않음 + isPaused: !widget.controller.isRunning && _specialAnimation == null, onPauseToggle: () async { await widget.controller.togglePause(); setState(() {}); diff --git a/lib/src/features/game/widgets/cinematic_view.dart b/lib/src/features/game/widgets/cinematic_view.dart index 95f8fa1..662720f 100644 --- a/lib/src/features/game/widgets/cinematic_view.dart +++ b/lib/src/features/game/widgets/cinematic_view.dart @@ -134,7 +134,7 @@ class _CinematicViewState extends State style: const TextStyle( color: Colors.white, fontSize: 18, - fontFamily: 'monospace', + fontFamily: 'JetBrainsMono', height: 1.5, ), textAlign: TextAlign.center, @@ -214,7 +214,7 @@ class _AsciiArtDisplay extends StatelessWidget { style: const TextStyle( color: Colors.cyan, fontSize: 14, - fontFamily: 'monospace', + fontFamily: 'JetBrainsMono', height: 1.2, ), textAlign: TextAlign.center, diff --git a/lib/src/features/game/widgets/combat_log.dart b/lib/src/features/game/widgets/combat_log.dart index 2fce2ca..cfa9eaa 100644 --- a/lib/src/features/game/widgets/combat_log.dart +++ b/lib/src/features/game/widgets/combat_log.dart @@ -114,7 +114,7 @@ class _LogEntryTile extends StatelessWidget { style: TextStyle( fontSize: 10, color: Theme.of(context).colorScheme.outline, - fontFamily: 'monospace', + fontFamily: 'JetBrainsMono', ), ), const SizedBox(width: 4), diff --git a/lib/src/features/game/widgets/death_overlay.dart b/lib/src/features/game/widgets/death_overlay.dart index 09b92a1..ee8a66a 100644 --- a/lib/src/features/game/widgets/death_overlay.dart +++ b/lib/src/features/game/widgets/death_overlay.dart @@ -102,7 +102,7 @@ class DeathOverlay extends StatelessWidget { Text( ' _____\n / \\\n| () () |\n \\ ^ /\n |||||', style: TextStyle( - fontFamily: 'monospace', + fontFamily: 'JetBrainsMono', fontSize: 14, color: Theme.of(context).colorScheme.error, height: 1.0, @@ -369,7 +369,7 @@ class DeathOverlay extends StatelessWidget { style: TextStyle( fontSize: 11, color: color, - fontFamily: 'monospace', + fontFamily: 'JetBrainsMono', ), ), ), diff --git a/lib/src/features/new_character/widgets/race_preview.dart b/lib/src/features/new_character/widgets/race_preview.dart index 2de556f..510357b 100644 --- a/lib/src/features/new_character/widgets/race_preview.dart +++ b/lib/src/features/new_character/widgets/race_preview.dart @@ -99,7 +99,7 @@ class _RacePreviewState extends State { TextSpan( text: char, style: TextStyle( - fontFamily: 'monospace', + fontFamily: 'JetBrainsMono', fontSize: 18, height: 1.2, color: _getCharColor(char),