2.8 KiB
2.8 KiB
23. 아이템 가격 리팩토링 및 이미지 필드 추가
목표
- 아이템의 가격(
price)을 코드 내 동적 계산이 아닌items.json에 명시된 고정 값으로 변경합니다. - 상점 구매 시 이 고정 가격을 사용하고, 판매 시에는 60%의 가격을 적용합니다.
- 향후 UI 개선을 위해
items.json과enemies.json에 이미지 경로 필드를 미리 추가합니다.
1. 아이템 가격 리팩토링
A. 데이터 파일 수정 (assets/data/items.json)
- 모든 아이템 항목에
price필드를 추가합니다. (예:"price": 100) - 적절한 가격을 설정합니다.
B. 데이터 로더 수정 (lib/game/data/item_table.dart)
ItemTemplate클래스에서price필드를 파싱하도록 수정합니다.createItem메서드에서 가격을 계산하는 로직을 제거하고, 템플릿의price를 그대로 사용하도록 변경합니다.- 단, 스테이지 스케일링에 따라 가격이 변동되어야 한다면 그 로직은 유지하거나 수정할 수 있습니다. (현재 요구사항은 "고정된 price"이므로 기본적으로 JSON 값을 따르되, +1 강화된 아이템의 경우 가격 상승 로직이 필요할 수 있음. 일단 기본 가격은 JSON을 따르게 함)
C. 상점 및 판매 로직 확인
BattleProvider(또는 상점 로직이 있는 곳)에서 아이템 구매 시item.price를 사용하도록 확인합니다.- 아이템 판매 시
GameMath.floor(item.price * 0.6)를 사용하여 소수점을 버리도록 로직을 수정합니다.
2. 이미지 필드 추가
A. JSON 데이터 수정
assets/data/items.json: 각 아이템에image필드 추가 (예:"image": "assets/images/items/sword.png")assets/data/enemies.json: 각 적에게image필드 추가 (예:"image": "assets/images/enemies/goblin.png")- 실제 이미지 파일은 아직 없으므로 필드만 추가합니다.
B. 모델 클래스 수정
lib/game/data/item_table.dart->ItemTemplate:image필드 파싱 추가.lib/game/model/item.dart->Item:image필드 추가.lib/game/data/enemy_table.dart->EnemyTemplate:image필드 파싱 추가.lib/game/model/entity.dart->Character:image필드 추가 (선택적).
C. UI 반영 (BattleScreen, Inventory)
BattleScreen과 인벤토리 UI에서 해당 이미지 경로를 사용할 수 있도록 준비합니다.- 이미지가 없는 경우(null 또는 파일 없음) 기존처럼 텍스트나 기본 아이콘을 표시하도록 예외 처리를 해둡니다.
검증
items.json의 가격이 게임 내(상점/인벤토리)에 올바르게 반영되는지 확인.- 판매 시 가격이 60%로 계산되는지 확인.
- 데이터 로딩 시 이미지 필드가 정상적으로 파싱되는지 확인 (테스트 코드 활용).