diff --git a/lib/src/core/animation/race_character_frames.dart b/lib/src/core/animation/race_character_frames.dart index eb4708a..46068b3 100644 --- a/lib/src/core/animation/race_character_frames.dart +++ b/lib/src/core/animation/race_character_frames.dart @@ -73,12 +73,12 @@ const _raceFrames = { CharacterFrame([r' o ', r' \| ', r' / \ ']), CharacterFrame([r' o ', r' \|- ', r' / \ ']), CharacterFrame([r' o ', r' \|-- ', r' / \ ']), - CharacterFrame([r' o ', r'\|-=>', r' / \ ']), + CharacterFrame([r' o ', r'\|-=> ', r' / \ ']), CharacterFrame([r' o ', r' /|\ ', r' / \ ']), ], hit: [ - CharacterFrame([r' o ', r'/|\* ', r' / \ ']), - CharacterFrame([r' o ', r'/|\ *', r' / \ ']), + CharacterFrame([r' o ', r'/|\* ', r' / \ ']), + CharacterFrame([r' o ', r'/|\ * ', r' / \ ']), CharacterFrame([r' o ', r' /|\ ', r' / \ ']), ], recover: [ @@ -105,12 +105,12 @@ const _raceFrames = { CharacterFrame([r' o ', r' \█ ', r' / \ ']), CharacterFrame([r' o ', r' \█- ', r' / \ ']), CharacterFrame([r' o ', r' \█-- ', r' / \ ']), - CharacterFrame([r' o ', r'\█-=>', r' / \ ']), + CharacterFrame([r' o ', r'\█-=> ', r' / \ ']), CharacterFrame([r' o ', r' /█\ ', r' / \ ']), ], hit: [ - CharacterFrame([r' o ', r'/█\* ', r' / \ ']), - CharacterFrame([r' o ', r'/█\ *', r' / \ ']), + CharacterFrame([r' o ', r'/█\* ', r' / \ ']), + CharacterFrame([r' o ', r'/█\ * ', r' / \ ']), CharacterFrame([r' o ', r' /█\ ', r' / \ ']), ], recover: [ @@ -140,12 +140,12 @@ const _raceFrames = { CharacterFrame([r' O ', r' \█ ', r' ┘ └ ']), CharacterFrame([r' O ', r' \█- ', r' ┘ └ ']), CharacterFrame([r' O ', r' \█-- ', r' ┘ └ ']), - CharacterFrame([r' O ', r'\█-=>', r' ┘ └ ']), + CharacterFrame([r' O ', r'\█-=> ', r' ┘ └ ']), CharacterFrame([r' O ', r' /█\ ', r' ┘ └ ']), ], hit: [ - CharacterFrame([r' O ', r'/█\* ', r' ┘ └ ']), - CharacterFrame([r' O ', r'/█\ *', r' ┘ └ ']), + CharacterFrame([r' O ', r'/█\* ', r' ┘ └ ']), + CharacterFrame([r' O ', r'/█\ * ', r' ┘ └ ']), CharacterFrame([r' O ', r' /█\ ', r' ┘ └ ']), ], recover: [ @@ -172,12 +172,12 @@ const _raceFrames = { CharacterFrame([r' Ö ', r' \▓ ', r' ┘ └ ']), CharacterFrame([r' Ö ', r' \▓- ', r' ┘ └ ']), CharacterFrame([r' Ö ', r' \▓-- ', r' ┘ └ ']), - CharacterFrame([r' Ö ', r'\▓-=>', r' ┘ └ ']), + CharacterFrame([r' Ö ', r'\▓-=> ', r' ┘ └ ']), CharacterFrame([r' Ö ', r' /▓\ ', r' ┘ └ ']), ], hit: [ - CharacterFrame([r' Ö ', r'/▓\* ', r' ┘ └ ']), - CharacterFrame([r' Ö ', r'/▓\ *', r' ┘ └ ']), + CharacterFrame([r' Ö ', r'/▓\* ', r' ┘ └ ']), + CharacterFrame([r' Ö ', r'/▓\ * ', r' ┘ └ ']), CharacterFrame([r' Ö ', r' /▓\ ', r' ┘ └ ']), ], recover: [ @@ -207,12 +207,12 @@ const _raceFrames = { CharacterFrame([r' o ', r' \| ', r' / \ ']), CharacterFrame([r' o ', r' \|- ', r' / \ ']), CharacterFrame([r' o ', r' \|-- ', r' / \ ']), - CharacterFrame([r' o ', r'\|-+>', r' / \ ']), + CharacterFrame([r' o ', r'\|-+> ', r' / \ ']), CharacterFrame([r' o ', r' /|+ ', r' / \ ']), ], hit: [ - CharacterFrame([r' o ', r'/|+* ', r' / \ ']), - CharacterFrame([r' o ', r'/|+ *', r' / \ ']), + CharacterFrame([r' o ', r'/|+* ', r' / \ ']), + CharacterFrame([r' o ', r'/|+ * ', r' / \ ']), CharacterFrame([r' o ', r' /|+ ', r' / \ ']), ], recover: [ @@ -239,12 +239,12 @@ const _raceFrames = { CharacterFrame([r' ♦ ', r' \| ', r' / \ ']), CharacterFrame([r' ♦ ', r' \|- ', r' / \ ']), CharacterFrame([r' ♦ ', r' \|-- ', r' / \ ']), - CharacterFrame([r' ♦ ', r'\|-->', r' / \ ']), + CharacterFrame([r' ♦ ', r'\|--> ', r' / \ ']), CharacterFrame([r' ♦ ', r' /|] ', r' / \ ']), ], hit: [ - CharacterFrame([r' ♦ ', r'/|]* ', r' / \ ']), - CharacterFrame([r' ♦ ', r'/|] *', r' / \ ']), + CharacterFrame([r' ♦ ', r'/|]* ', r' / \ ']), + CharacterFrame([r' ♦ ', r'/|] * ', r' / \ ']), CharacterFrame([r' ♦ ', r' /|] ', r' / \ ']), ], recover: [ @@ -271,12 +271,12 @@ const _raceFrames = { CharacterFrame([r' ö ', r' \▒ ', r' / \ ']), CharacterFrame([r' ö ', r' \▒- ', r' / \ ']), CharacterFrame([r' ö ', r' \▒-- ', r' / \ ']), - CharacterFrame([r' ö ', r'\▒-=>', r' / \ ']), + CharacterFrame([r' ö ', r'\▒-=> ', r' / \ ']), CharacterFrame([r' ö ', r' /▒\ ', r' / \ ']), ], hit: [ - CharacterFrame([r' ö ', r'/▒\* ', r' / \ ']), - CharacterFrame([r' ö ', r'/▒\ *', r' / \ ']), + CharacterFrame([r' ö ', r'/▒\* ', r' / \ ']), + CharacterFrame([r' ö ', r'/▒\ * ', r' / \ ']), CharacterFrame([r' ö ', r' /▒\ ', r' / \ ']), ], recover: [ @@ -306,12 +306,12 @@ const _raceFrames = { CharacterFrame([r' o~ ', r' \| ', r' / \ ']), CharacterFrame([r' o~ ', r' \|~ ', r' / \ ']), CharacterFrame([r' o~ ', r' \|~~ ', r' / \ ']), - CharacterFrame([r' o~ ', r'\|~~*', r' / \ ']), + CharacterFrame([r' o~ ', r'\|~~* ', r' / \ ']), CharacterFrame([r' o~ ', r' /|) ', r' / \ ']), ], hit: [ - CharacterFrame([r' o~ ', r'/|)* ', r' / \ ']), - CharacterFrame([r' o~ ', r'/|) *', r' / \ ']), + CharacterFrame([r' o~ ', r'/|)* ', r' / \ ']), + CharacterFrame([r' o~ ', r'/|) * ', r' / \ ']), CharacterFrame([r' o~ ', r' /|) ', r' / \ ']), ], recover: [ @@ -338,12 +338,12 @@ const _raceFrames = { CharacterFrame([r' o♣ ', r' \| ', r' / \ ']), CharacterFrame([r' o♣ ', r' \|~ ', r' / \ ']), CharacterFrame([r' o♣ ', r' \|~~ ', r' / \ ']), - CharacterFrame([r' o♣ ', r'\|~~♣', r' / \ ']), + CharacterFrame([r' o♣ ', r'\|~~♣ ', r' / \ ']), CharacterFrame([r' o♣ ', r' /|) ', r' / \ ']), ], hit: [ - CharacterFrame([r' o♣ ', r'/|)* ', r' / \ ']), - CharacterFrame([r' o♣ ', r'/|) *', r' / \ ']), + CharacterFrame([r' o♣ ', r'/|)* ', r' / \ ']), + CharacterFrame([r' o♣ ', r'/|) * ', r' / \ ']), CharacterFrame([r' o♣ ', r' /|) ', r' / \ ']), ], recover: [ @@ -370,12 +370,12 @@ const _raceFrames = { CharacterFrame([r' o∞ ', r' \| ', r' / \ ']), CharacterFrame([r' o∞ ', r' \|~ ', r' / \ ']), CharacterFrame([r' o∞ ', r' \|~~ ', r' / \ ']), - CharacterFrame([r' o∞ ', r'\|~~∞', r' / \ ']), + CharacterFrame([r' o∞ ', r'\|~~∞ ', r' / \ ']), CharacterFrame([r' o∞ ', r' /|) ', r' / \ ']), ], hit: [ - CharacterFrame([r' o∞ ', r'/|)* ', r' / \ ']), - CharacterFrame([r' o∞ ', r'/|) *', r' / \ ']), + CharacterFrame([r' o∞ ', r'/|)* ', r' / \ ']), + CharacterFrame([r' o∞ ', r'/|) * ', r' / \ ']), CharacterFrame([r' o∞ ', r' /|) ', r' / \ ']), ], recover: [ @@ -405,12 +405,12 @@ const _raceFrames = { CharacterFrame([r' ☠ ', r' \| ', r' / \ ']), CharacterFrame([r' ☠ ', r' \|- ', r' / \ ']), CharacterFrame([r' ☠ ', r' \|-- ', r' / \ ']), - CharacterFrame([r' ☠ ', r'\|-~>', r' / \ ']), + CharacterFrame([r' ☠ ', r'\|-~> ', r' / \ ']), CharacterFrame([r' ☠ ', r' /|\ ', r' / \ ']), ], hit: [ - CharacterFrame([r' ☠ ', r'/|\~ ', r' / \ ']), - CharacterFrame([r' ☠ ', r'/|\ ~', r' / \ ']), + CharacterFrame([r' ☠ ', r'/|\~ ', r' / \ ']), + CharacterFrame([r' ☠ ', r'/|\ ~ ', r' / \ ']), CharacterFrame([r' ☠ ', r' /|\ ', r' / \ ']), ], recover: [ @@ -437,12 +437,12 @@ const _raceFrames = { CharacterFrame([r' ö ', r' \| ', r' / \ ']), CharacterFrame([r' ö ', r' \|~ ', r' / \ ']), CharacterFrame([r' ö ', r' \|~~ ', r' / \ ']), - CharacterFrame([r' ö ', r'\|~~*', r' / \ ']), + CharacterFrame([r' ö ', r'\|~~* ', r' / \ ']), CharacterFrame([r' ö ', r' /|\ ', r' / \ ']), ], hit: [ - CharacterFrame([r' ö ', r'/|\* ', r' / \ ']), - CharacterFrame([r' ö ', r'/|\ *', r' / \ ']), + CharacterFrame([r' ö ', r'/|\* ', r' / \ ']), + CharacterFrame([r' ö ', r'/|\ * ', r' / \ ']), CharacterFrame([r' ö ', r' /|\ ', r' / \ ']), ], recover: [ @@ -469,12 +469,12 @@ const _raceFrames = { CharacterFrame([r' ô ', r' \| ', r' / \ ']), CharacterFrame([r' ô ', r' \|+ ', r' / \ ']), CharacterFrame([r' ô ', r' \|++ ', r' / \ ']), - CharacterFrame([r' ô ', r'\|++*', r' / \ ']), + CharacterFrame([r' ô ', r'\|++* ', r' / \ ']), CharacterFrame([r' ô ', r' /|\ ', r' / \ ']), ], hit: [ - CharacterFrame([r' ô ', r'/|\+ ', r' / \ ']), - CharacterFrame([r' ô ', r'/|\ +', r' / \ ']), + CharacterFrame([r' ô ', r'/|\+ ', r' / \ ']), + CharacterFrame([r' ô ', r'/|\ + ', r' / \ ']), CharacterFrame([r' ô ', r' /|\ ', r' / \ ']), ], recover: [ @@ -504,12 +504,12 @@ const _raceFrames = { CharacterFrame([r' o ', r' \| ', r' Y ']), CharacterFrame([r' o ', r' \|- ', r' Y ']), CharacterFrame([r' o ', r' \|-- ', r' Y ']), - CharacterFrame([r' o ', r'\|-=>', r' Y ']), + CharacterFrame([r' o ', r'\|-=> ', r' Y ']), CharacterFrame([r' o ', r' /|\ ', r' Y ']), ], hit: [ - CharacterFrame([r' o ', r'/|\* ', r' Y ']), - CharacterFrame([r' o ', r'/|\ *', r' Y ']), + CharacterFrame([r' o ', r'/|\* ', r' Y ']), + CharacterFrame([r' o ', r'/|\ * ', r' Y ']), CharacterFrame([r' o ', r' /|\ ', r' Y ']), ], recover: [ @@ -536,12 +536,12 @@ const _raceFrames = { CharacterFrame([r' ◦ ', r' \| ', r' Y ']), CharacterFrame([r' ◦ ', r' \|- ', r' Y ']), CharacterFrame([r' ◦ ', r' \|-- ', r' Y ']), - CharacterFrame([r' ◦ ', r'\|-=>', r' Y ']), + CharacterFrame([r' ◦ ', r'\|-=> ', r' Y ']), CharacterFrame([r' ◦ ', r' /|\ ', r' Y ']), ], hit: [ - CharacterFrame([r' ◦ ', r'/|\* ', r' Y ']), - CharacterFrame([r' ◦ ', r'/|\ *', r' Y ']), + CharacterFrame([r' ◦ ', r'/|\* ', r' Y ']), + CharacterFrame([r' ◦ ', r'/|\ * ', r' Y ']), CharacterFrame([r' ◦ ', r' /|\ ', r' Y ']), ], recover: [ @@ -568,12 +568,12 @@ const _raceFrames = { CharacterFrame([r' ^ ', r' \| ', r' Y ']), CharacterFrame([r' ^ ', r' \|- ', r' Y ']), CharacterFrame([r' ^ ', r' \|-- ', r' Y ']), - CharacterFrame([r' ^ ', r'\|-->', r' Y ']), + CharacterFrame([r' ^ ', r'\|--> ', r' Y ']), CharacterFrame([r' ^ ', r' /|\ ', r' Y ']), ], hit: [ - CharacterFrame([r' ^ ', r'/|\* ', r' Y ']), - CharacterFrame([r' ^ ', r'/|\ *', r' Y ']), + CharacterFrame([r' ^ ', r'/|\* ', r' Y ']), + CharacterFrame([r' ^ ', r'/|\ * ', r' Y ']), CharacterFrame([r' ^ ', r' /|\ ', r' Y ']), ], recover: [ @@ -603,7 +603,7 @@ const _raceFrames = { CharacterFrame([r' ·o· ', r' \ ', r' ~~~ ']), CharacterFrame([r' ·o· ', r' \~ ', r' ~~~ ']), CharacterFrame([r' ·o· ', r' \~~ ', r' ~~~ ']), - CharacterFrame([r' ·o· ', r'\~~* ', r' ~~~ ']), + CharacterFrame([r' ·o· ', r'\~~* ', r' ~~~ ']), CharacterFrame([r' ·o· ', r' | ', r' ~~~ ']), ], hit: [ @@ -635,7 +635,7 @@ const _raceFrames = { CharacterFrame([r' *o* ', r' \ ', r' ~~~ ']), CharacterFrame([r' *o* ', r' \* ', r' ~~~ ']), CharacterFrame([r' *o* ', r' \** ', r' ~~~ ']), - CharacterFrame([r' *o* ', r'\**+ ', r' ~~~ ']), + CharacterFrame([r' *o* ', r'\**+ ', r' ~~~ ']), CharacterFrame([r' *o* ', r' | ', r' ~~~ ']), ], hit: [ @@ -670,12 +670,12 @@ const _raceFrames = { CharacterFrame([r' o ', r' \| ', r' λ \ ']), CharacterFrame([r' o ', r' \|) ', r' λ \ ']), CharacterFrame([r' o ', r' \|)) ', r' λ \ ']), - CharacterFrame([r' o ', r'\|))>', r' λ \ ']), + CharacterFrame([r' o ', r'\|))> ', r' λ \ ']), CharacterFrame([r' o ', r' /|\ ', r' λ \ ']), ], hit: [ - CharacterFrame([r' o ', r'/|\* ', r' λ \ ']), - CharacterFrame([r' o ', r'/|\ *', r' λ \ ']), + CharacterFrame([r' o ', r'/|\* ', r' λ \ ']), + CharacterFrame([r' o ', r'/|\ * ', r' λ \ ']), CharacterFrame([r' o ', r' /|\ ', r' λ \ ']), ], recover: [ @@ -702,12 +702,12 @@ const _raceFrames = { CharacterFrame([r' o ', r' \| ', r' λ \ ']), CharacterFrame([r' o ', r' \|- ', r' λ \ ']), CharacterFrame([r' o ', r' \|-- ', r' λ \ ']), - CharacterFrame([r' o ', r'\|--x', r' λ \ ']), + CharacterFrame([r' o ', r'\|--x ', r' λ \ ']), CharacterFrame([r' o ', r' /|\ ', r' λ \ ']), ], hit: [ - CharacterFrame([r' o ', r'/|\x ', r' λ \ ']), - CharacterFrame([r' o ', r'/|\ x', r' λ \ ']), + CharacterFrame([r' o ', r'/|\x ', r' λ \ ']), + CharacterFrame([r' o ', r'/|\ x ', r' λ \ ']), CharacterFrame([r' o ', r' /|\ ', r' λ \ ']), ], recover: [ @@ -737,12 +737,12 @@ const _raceFrames = { CharacterFrame([r' ô ', r' \| ', r' ∧ ']), CharacterFrame([r' ô ', r' \|* ', r' ∧ ']), CharacterFrame([r' ô ', r' \|** ', r' ∧ ']), - CharacterFrame([r' ô ', r'\|**>', r' ∧ ']), + CharacterFrame([r' ô ', r'\|**> ', r' ∧ ']), CharacterFrame([r' ô ', r' /|\ ', r' ∧ ']), ], hit: [ - CharacterFrame([r' ô ', r'/|\* ', r' ∧ ']), - CharacterFrame([r' ô ', r'/|\ *', r' ∧ ']), + CharacterFrame([r' ô ', r'/|\* ', r' ∧ ']), + CharacterFrame([r' ô ', r'/|\ * ', r' ∧ ']), CharacterFrame([r' ô ', r' /|\ ', r' ∧ ']), ], recover: [ diff --git a/lib/src/features/game/game_play_screen.dart b/lib/src/features/game/game_play_screen.dart index 53e2da8..3cb9414 100644 --- a/lib/src/features/game/game_play_screen.dart +++ b/lib/src/features/game/game_play_screen.dart @@ -518,14 +518,16 @@ class _GamePlayScreenState extends State /// 부활 처리 핸들러 Future _handleResurrect() async { - // 1. 부활 처리 (HP/MP 회복, 장비 구매 - 게임 재개 없음) - await widget.controller.resurrect(); - - // 2. 부활 애니메이션 재생 + // 1. 부활 애니메이션 먼저 설정 (DeathOverlay 사라지기 전에) setState(() { _specialAnimation = AsciiAnimationType.resurrection; }); + // 2. 부활 처리 (HP/MP 회복, 장비 구매 - 게임 재개 없음) + // 이 시점에서 isDead가 false가 되고 DeathOverlay가 사라지지만, + // _specialAnimation이 이미 설정되어 있어 부활 애니메이션이 표시됨 + await widget.controller.resurrect(); + // 3. 애니메이션 종료 후 게임 재개 final duration = getSpecialAnimationDuration( AsciiAnimationType.resurrection,