56 lines
2.7 KiB
Markdown
56 lines
2.7 KiB
Markdown
# 32. 적 장비 시스템 (Enemy Equipment System)
|
|
|
|
## 1. 배경 (Background)
|
|
|
|
현재 플레이어는 장비를 통해 스탯 보너스와 특수 효과(출혈, 스턴 등)를 얻습니다. 적(Enemy) 또한 동일한 `Character` 클래스를 사용하므로, 적에게도 장비를 부여하여 다양한 전투 패턴과 난이도를 구현하고자 합니다.
|
|
|
|
## 2. 목표 (Objective)
|
|
|
|
- **적 데이터 구조 변경:** `enemies.json`에 `equipment` 필드 추가.
|
|
- **적 생성 로직 변경:** `EnemyTemplate`에서 적 생성 시, 정의된 장비 아이템을 인벤토리에 추가하고 장착.
|
|
- **전투 로직 확인:** 적이 공격할 때 장착된 아이템의 효과(상태이상 등)가 플레이어에게 적용되는지 확인.
|
|
|
|
## 3. 작업 상세 (Implementation Details)
|
|
|
|
### A. 데이터 파일 수정 (`assets/data/enemies.json`)
|
|
|
|
- 적 정의에 `equipment` 필드(List<String> - Item ID) 추가.
|
|
- 예시:
|
|
```json
|
|
{
|
|
"name": "Goblin",
|
|
"baseHp": 20,
|
|
"baseAtk": 5,
|
|
"baseDefense": 5,
|
|
"image": "assets/images/enemies/goblin.png",
|
|
"equipment": ["dagger_001"] // Dagger for bleed effect
|
|
}
|
|
```
|
|
|
|
### B. `lib/game/data/enemy_table.dart` 수정
|
|
|
|
- `EnemyTemplate` 클래스에 `List<String> equipmentIds` 필드 추가.
|
|
- `fromJson` 메서드에서 `equipment` 필드 파싱.
|
|
- `createCharacter` 메서드 수정:
|
|
- `ItemTable.get(id)`를 사용하여 아이템 인스턴스 생성.
|
|
- 생성된 아이템을 적의 인벤토리에 추가(`addToInventory`)하고 장착(`equip`).
|
|
- _Note: `ItemTable`에 ID로 아이템을 찾는 기능이 없다면 추가 필요._
|
|
|
|
### C. `lib/game/data/item_table.dart` 확인 및 수정
|
|
|
|
- 아이템을 ID로 조회하는 기능(`getItem(String id)`)이 있는지 확인하고, 없다면 구현.
|
|
- 현재 `items.json`에는 ID 필드가 명시적으로 없을 수 있으므로, `id` 필드를 추가하거나 기존 `name`을 ID로 사용할지 결정 필요 (ID 필드 추가 권장).
|
|
|
|
### D. `lib/providers/battle_provider.dart` 검증
|
|
|
|
- `_tryApplyStatusEffects` 메서드가 `attacker.equipment`를 순회하므로, 적이 공격할 때도 로직이 정상 동작하는지 확인.
|
|
- 별도의 코드 수정은 필요 없을 것으로 예상되나, 테스트를 통해 검증.
|
|
|
|
## 4. 검증 (Verification)
|
|
|
|
- **데이터 로드 테스트:** 앱 실행 시 `enemies.json` 파싱 에러가 없는지 확인.
|
|
- **전투 테스트:**
|
|
- 특정 장비(예: 출혈 단검)를 가진 적(예: 고블린)과 전투.
|
|
- 적의 공격 성공 시, 플레이어에게 출혈(Bleed) 효과가 적용되는지 로그 및 UI로 확인.
|
|
- 적 정보 창(구현되어 있다면) 또는 로그를 통해 적이 장비를 착용하고 있는지 확인.
|