update : icon image

This commit is contained in:
2025-12-07 16:48:03 +09:00
parent 8771f2c1af
commit d5609aff0f
21 changed files with 684 additions and 394 deletions
+6 -6
View File
@@ -114,6 +114,7 @@
## 4. 작업 컨벤션 (Working Conventions)
- **Prompt Driven Development:** `prompt/XX_description.md` 유지.
- **유사 작업 통합:** 작업 내용이 이전 프롬프트와 유사한 경우 새로운 프롬프트를 생성하지 않고 기존 프롬프트에 내용을 추가합니다.
- **Language:** **모든 프롬프트 파일(prompt/XX_...)은 반드시 한국어(Korean)로 작성해야 합니다.**
- **Config Management:** 하드코딩되는 값들은 `config` 폴더 내 파일들(`lib/game/config/` 등)에서 통합 관리할 수 있도록 작성해야 합니다.
- **State Management:** `Provider` + `Stream` (이벤트성 데이터).
@@ -153,10 +154,9 @@
## 7. 프롬프트 히스토리 (Prompt History)
- [x] 39_luck_system.md
- [x] 40_ui_update_summary.md
- [x] 41_refactoring_presets.md
- [x] 42_item_rarity_and_tier.md
- [x] 43_shop_system.md
- [x] 44_settings_and_local_storage.md
- [x] 45_config_refactoring.md
- [x] 46_shop_refactoring.md
- [x] 47_inventory_full_handling.md
- [x] 48_refactor_stage_ui.md
- [x] 49_implement_item_icons.md
+30
View File
@@ -0,0 +1,30 @@
# 46. 상점 시스템 리팩토링 및 예외 처리 (Shop System Refactoring & Error Handling)
## 1. 목표 (Goal)
- `BattleProvider`에 집중된 상점 관련 로직을 `ShopProvider`로 분리하여 **관심사의 분리(Separation of Concerns)**를 실현합니다.
- 아이템 획득(보상/구매) 시 인벤토리 가득 참이나 골드 부족 등의 예외 상황에 대해 명확한 에러 메시지(UI 피드백)를 제공합니다.
## 2. 구현 상세 (Implementation Details)
### A. 상점 로직 분리 (`ShopProvider`)
- **파일:** `lib/providers/shop_provider.dart` 생성.
- **이동된 기능:**
- `generateShopItems`: 스테이지 티어에 따른 상점 아이템 목록 생성.
- `rerollShopItems`: 골드 소모 후 아이템 목록 갱신.
- `buyItem`: 골드 차감 및 인벤토리 추가 로직.
- **구조 변경:**
- `BattleProvider`는 더 이상 `BuildContext`를 직접 참조하거나 상점 상태를 관리하지 않습니다.
- `main.dart`에서 `ChangeNotifierProxyProvider`를 사용하여 `ShopProvider``BattleProvider`에 주입(Injection)합니다.
### B. 예외 처리 및 UI 피드백
- **반환값 변경 (`bool`):**
- `BattleProvider.selectReward`: 인벤토리 가득 찰 시 `false` 반환.
- `ShopProvider.buyItem`: 골드 부족 또는 인벤토리 가득 찰 시 `false` 반환.
- **UI 반영 (`BattleScreen`, `ShopUI`):**
- 메서드가 `false`를 반환할 경우 `ScaffoldMessenger`를 통해 붉은색 `SnackBar`로 에러 메시지를 출력합니다.
- 예: "Inventory is full! Cannot take item.", "Purchase failed! Check inventory or gold."
## 3. 결과 (Result)
- **코드 품질:** 거대해지던 `BattleProvider`의 책임을 분산시켜 유지보수성을 높였습니다.
- **안정성:** `BattleProvider``BuildContext` 의존성을 제거하여 잠재적인 컨텍스트 관련 오류를 해결했습니다.
- **사용자 경험:** 아이템 획득 실패 시 명확한 피드백을 제공하여 답답함을 해소했습니다.
+21
View File
@@ -0,0 +1,21 @@
# 47. 인벤토리 가득 참 처리 (Inventory Full Handling)
## 1. 목표 (Goal)
- 인벤토리가 가득 찬 상태(`maxInventorySize`)에서 보상 아이템 획득을 시도할 경우, 게임이 진행되지 않고 에러 메시지를 표시합니다.
- 보상 팝업이 닫히지 않도록 하여 사용자가 다른 행동(스킵 또는 인벤토리 관리)을 할 수 있게 합니다.
## 2. 구현 상세 (Implementation Details)
### `BattleProvider` 수정
- **`selectReward` 메서드 반환값 변경:** `void` -> `bool`.
- **성공 (아이템 획득 또는 스킵):** `true` 반환. 스테이지 클리어 로직 진행.
- **실패 (인벤토리 가득 참):** `false` 반환. 스테이지 클리어 로직 중단. 로그만 남김.
### `BattleScreen` 수정
- **보상 선택 로직:**
- `battleProvider.selectReward(item)`의 반환값을 확인.
- `false`일 경우 `ScaffoldMessenger`를 사용하여 "Inventory is full! Cannot take item." 스낵바 출력.
## 3. 결과 (Result)
- 인벤토리가 가득 찼을 때 실수로 아이템이 버려지거나 다음 스테이지로 강제 진행되는 문제를 방지했습니다.
- 사용자에게 명확한 피드백(에러 메시지)을 제공합니다.
+21
View File
@@ -0,0 +1,21 @@
# 48. Stage UI 구조 개선 (Refactor Stage UI Structure)
## 1. 목표 (Goal)
- `lib/widgets/battle/stage_ui.dart`에 혼재되어 있던 `ShopUI``RestUI`를 분리하여 `lib/widgets/stage/` 폴더 내의 독립적인 파일로 관리합니다.
- 코드의 가독성과 모듈화를 향상시킵니다.
## 2. 구현 상세 (Implementation Details)
### 폴더 및 파일 생성
- **폴더:** `lib/widgets/stage/`
- **파일 분리:**
- `lib/widgets/stage/shop_ui.dart`: 상점 UI 관련 코드 이동.
- `lib/widgets/stage/rest_ui.dart`: 휴식 UI 관련 코드 이동.
### 코드 수정 (Code Updates)
- **기존 파일 삭제:** `lib/widgets/battle/stage_ui.dart` 삭제.
- **참조 수정:** `BattleScreen` 등에서 `stage_ui.dart`를 참조하던 부분을 새로운 경로(`shop_ui.dart`, `rest_ui.dart`)로 업데이트.
## 3. 결과 (Result)
- 상점과 휴식 스테이지 UI가 물리적으로 분리되어 관리가 용이해졌습니다.
- 프로젝트의 위젯 구조가 기능별로 더욱 명확하게 정리되었습니다.
+31
View File
@@ -0,0 +1,31 @@
# 52. 아이템 아이콘 이미지 적용 (Item Icon Image Implementation)
## 1. 목표 (Goal)
- 기존의 머티리얼 아이콘(`IconData`) 대신 `assets/data/icon/`에 추가된 PNG 이미지 아이콘을 UI에 적용합니다.
- `ItemUtils`를 수정하여 아이콘 경로를 반환하도록 변경하고, 주요 UI 화면(`BattleScreen`, `InventoryScreen`, `ShopUI`)에서 `Image.asset`을 사용하도록 리팩토링합니다.
## 2. 구현 상세 (Implementation Details)
### 에셋 등록
- `pubspec.yaml``assets/data/icon/` 경로 추가.
### `ItemUtils` 수정
- `getIcon(EquipmentSlot)` 제거 (또는 사용처 변경).
- `getIconPath(EquipmentSlot)` 메서드 추가: 장비 슬롯별 이미지 파일 경로 반환.
- Weapon -> `icon_weapon.png`
- Shield -> `icon_shield.png`
- Armor -> `icon_armor.png`
- Accessory -> `icon_accessory.png`
### UI 수정 (Icon -> Image.asset)
- **`ShopUI` (`lib/widgets/stage/shop_ui.dart`):** 상점 아이템 카드의 아이콘 교체.
- **`InventoryScreen` (`lib/screens/inventory_screen.dart`):**
- 착용 중인 아이템 슬롯의 아이콘 교체.
- 인벤토리 그리드 내 아이템 아이콘 교체.
- **`BattleScreen` (`lib/screens/battle_screen.dart`):**
- 스테이지 클리어 보상 팝업의 아이템 아이콘 교체.
- **플로팅 액션 버튼(FAB):** ATK/DEF 버튼의 아이콘을 `icon_weapon.png``icon_shield.png`로 교체하고 흰색 틴트 적용.
## 3. 결과 (Result)
- 게임 내 아이템 표현이 단순 기호에서 구체적인 이미지로 변경되어 시각적 몰입도가 향상되었습니다.
- `ItemUtils`를 통해 아이콘 자원 관리가 중앙화되었습니다.