## 14. BattleProvider에 상태이상 로직 통합 및 아이템 데이터 추가 준비 ### 목표 상태이상 시스템을 BattleProvider에 통합하고, 상태이상을 가진 아이템을 게임에 추가하기 위한 준비를 마친다. ### 구현 내용 1. **`BattleProvider`의 상태이상 로직 통합 (lib/providers/battle_provider.dart)** * `StatusEffect` 관련 정의 (`lib/game/model/status_effect.dart`)를 임포트했다. * **턴 시작 시 효과 처리 (`_processStartTurnEffects`):** * 캐릭터의 턴 시작 시 호출되어 출혈(Bleed) 데미지를 적용하고, 기절(Stun) 상태 여부를 체크하여 캐릭터의 행동 가능 여부를 결정한다. * 기절 상태인 경우, 캐릭터는 해당 턴에 아무런 행동도 할 수 없다. * **턴 종료 시 효과 갱신:** * `playerAction` 및 `_enemyTurn` 메서드 내에서 턴 종료 시 `Character.updateStatusEffects()`를 호출하여 모든 상태이상의 `duration`을 감소시키고 만료된 효과를 제거한다. * **공격 시 상태이상 부여 (`_tryApplyStatusEffects`):** * 공격이 성공했을 때, 공격자(`player`)가 장착한 아이템들의 `ItemEffect` 목록을 순회한다. * 각 `ItemEffect`의 `probability`에 따라 랜덤하게 상태이상을 굴려 피격자(`enemy`)에게 `Character.addStatusEffect()`를 통해 상태이상을 부여한다. * **취약(Vulnerable) 효과 적용 (`_applyDamage`):** * `_applyDamage` 메서드 내에서 피격자가 `vulnerable` 상태일 경우, 최종 데미지를 1.5배 증폭시킨다. * **방어불가(DefenseForbidden) 효과 적용 (`playerAction`):** * `playerAction` 메서드 초반에 플레이어가 `defenseForbidden` 상태일 경우, 방어 행동을 선택할 수 없도록 막는 로직을 추가했다. 2. **`Character` 클래스 `onHitEffects` getter 추가 (lib/game/model/entity.dart) - 미실현** * 이전 대화에서 `Character`에 `onHitEffects` getter를 추가하여 모든 장비의 효과를 모아주는 것을 논의했으나, `_tryApplyStatusEffects`가 `attacker.equipment.values`를 직접 순회하는 방식으로 구현되면서 현재는 미실현 상태이다. 필요시 추후 리팩토링될 수 있다. 3. **상태이상을 가진 아이템 데이터 추가 준비:** * 다음 단계로 `lib/game/data/item_table.dart`에 상태이상 효과를 가진 새로운 아이템들을 추가할 예정이다. 이 아이템들은 게임 시작 시 플레이어 인벤토리에 지급되어 테스트에 활용될 것이다.