game/prompt/14_integrate_status_effects...

2.6 KiB

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 목록을 순회한다.
      • ItemEffectprobability에 따라 랜덤하게 상태이상을 굴려 피격자(enemy)에게 Character.addStatusEffect()를 통해 상태이상을 부여한다.
    • 취약(Vulnerable) 효과 적용 (_applyDamage):
      • _applyDamage 메서드 내에서 피격자가 vulnerable 상태일 경우, 최종 데미지를 1.5배 증폭시킨다.
    • 방어불가(DefenseForbidden) 효과 적용 (playerAction):
      • playerAction 메서드 초반에 플레이어가 defenseForbidden 상태일 경우, 방어 행동을 선택할 수 없도록 막는 로직을 추가했다.
  2. Character 클래스 onHitEffects getter 추가 (lib/game/model/entity.dart) - 미실현

    • 이전 대화에서 CharacteronHitEffects getter를 추가하여 모든 장비의 효과를 모아주는 것을 논의했으나, _tryApplyStatusEffectsattacker.equipment.values를 직접 순회하는 방식으로 구현되면서 현재는 미실현 상태이다. 필요시 추후 리팩토링될 수 있다.
  3. 상태이상을 가진 아이템 데이터 추가 준비:

    • 다음 단계로 lib/game/data/item_table.dart에 상태이상 효과를 가진 새로운 아이템들을 추가할 예정이다. 이 아이템들은 게임 시작 시 플레이어 인벤토리에 지급되어 테스트에 활용될 것이다.