2.3 KiB
2.3 KiB
69. Sync Damage to Animation Impact (UI-Driven)
1. 목표 (Goal)
- 플레이어와 적 모두의 공격 시 데미지 텍스트 출력이 애니메이션 타격(Impact) 순간과 완벽하게 동기화되도록 수정합니다.
2. 문제점 (Problem)
- 기존에는
BattleProvider가Future.delayed로 애니메이션 시간을 예측했으나, 이는 UI의 실제 Impact 시점과 미묘하게 어긋나 데미지 텍스트가 먼저 뜨는 현상이 발생했습니다.
3. 해결 방안 (Solution)
- UI (BattleScreen)가 애니메이션 Impact 시점을
BattleProvider에게 직접 알려주어 데미지 처리를 트리거하는 "UI 주도 Impact 처리" 방식으로 전환합니다.
4. 구현 계획 (Implementation Plan)
A. EffectEvent 데이터 확장 (lib/game/model/effect_event.dart)
EffectEvent에attacker,target(Character 객체),damage,risk,isSuccess등 Impact 시점에 필요한 모든 정보를 담습니다.
B. BattleProvider 수정 (lib/providers/battle_provider.dart)
Future.delayed제거:playerAction및_enemyTurn의 공격 로직에서await Future.delayed(...)를 제거합니다.- 데미지 처리 로직 추출: 공격 Impact 시점에 발생해야 할 모든 로직(HP 감소,
DamageEvent전송, 로그 기록, 상태이상 적용)을_processAttackImpact라는private또는public메서드로 추출합니다. - 새로운
public메서드 추가:BattleProvider.handleAttackImpact(String eventId, Character attacker, Character target, int damage, RiskLevel risk, bool isSuccess)와 같은 메서드를 만들어,BattleScreen에서 Impact 시점에 호출하도록 합니다.
C. BattleScreen 수정 (lib/screens/battle_screen.dart)
_addFloatingEffect메서드 내에서animateAttack를 호출할 때:onImpact콜백 내에서context.read<BattleProvider>().handleAttackImpact(...)를 호출합니다.EffectEvent에 담긴 정보를 기반으로handleAttackImpact에 인자를 전달합니다.
5. 기대 효과 (Expected Outcome)
- 애니메이션과 데미지 텍스트 출력이 완벽하게 동기화되어, 게임의 타격감이 대폭 향상됩니다.
- 로직과 UI 간의 역할 분리가 명확해집니다.