2.6 KiB
2.6 KiB
14. BattleProvider에 상태이상 로직 통합 및 아이템 데이터 추가 준비
목표
상태이상 시스템을 BattleProvider에 통합하고, 상태이상을 가진 아이템을 게임에 추가하기 위한 준비를 마친다.
구현 내용
-
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상태일 경우, 방어 행동을 선택할 수 없도록 막는 로직을 추가했다.
-
Character클래스onHitEffectsgetter 추가 (lib/game/model/entity.dart) - 미실현- 이전 대화에서
Character에onHitEffectsgetter를 추가하여 모든 장비의 효과를 모아주는 것을 논의했으나,_tryApplyStatusEffects가attacker.equipment.values를 직접 순회하는 방식으로 구현되면서 현재는 미실현 상태이다. 필요시 추후 리팩토링될 수 있다.
- 이전 대화에서
-
상태이상을 가진 아이템 데이터 추가 준비:
- 다음 단계로
lib/game/data/item_table.dart에 상태이상 효과를 가진 새로운 아이템들을 추가할 예정이다. 이 아이템들은 게임 시작 시 플레이어 인벤토리에 지급되어 테스트에 활용될 것이다.
- 다음 단계로