feat(game): 포션 시스템 및 UI 패널 추가

- 포션 시스템 구현 (PotionService, Potion 모델)
- 포션 인벤토리 패널 위젯
- 활성 버프 패널 위젯
- 장비 스탯 패널 위젯
- 스킬 시스템 확장
- 일본어 번역 추가
- 전투 이벤트/상태 모델 개선
This commit is contained in:
JiWoong Sul
2025-12-21 23:53:27 +09:00
parent eb71d2a199
commit 7cd8be88df
25 changed files with 5174 additions and 261 deletions

187
lib/data/potion_data.dart Normal file
View File

@@ -0,0 +1,187 @@
import 'package:askiineverdie/src/core/model/potion.dart';
/// 게임 내 물약 정의
///
/// HP/MP 물약 데이터 (티어 1~5)
class PotionData {
PotionData._();
// ============================================================================
// HP 물약
// ============================================================================
/// Minor Health Patch - 소형 HP 물약
static const minorHealthPatch = Potion(
id: 'minor_health_patch',
name: 'Minor Health Patch',
type: PotionType.hp,
tier: 1,
healAmount: 30,
healPercent: 0.0,
price: 25,
);
/// Health Patch - 일반 HP 물약
static const healthPatch = Potion(
id: 'health_patch',
name: 'Health Patch',
type: PotionType.hp,
tier: 2,
healAmount: 50,
healPercent: 0.10,
price: 75,
);
/// Major Health Patch - 대형 HP 물약
static const majorHealthPatch = Potion(
id: 'major_health_patch',
name: 'Major Health Patch',
type: PotionType.hp,
tier: 3,
healAmount: 80,
healPercent: 0.20,
price: 200,
);
/// Super Health Patch - 초대형 HP 물약
static const superHealthPatch = Potion(
id: 'super_health_patch',
name: 'Super Health Patch',
type: PotionType.hp,
tier: 4,
healAmount: 120,
healPercent: 0.30,
price: 500,
);
/// Ultra Health Patch - 최고급 HP 물약
static const ultraHealthPatch = Potion(
id: 'ultra_health_patch',
name: 'Ultra Health Patch',
type: PotionType.hp,
tier: 5,
healAmount: 200,
healPercent: 0.40,
price: 1200,
);
// ============================================================================
// MP 물약
// ============================================================================
/// Minor Mana Cache - 소형 MP 물약
static const minorManaCache = Potion(
id: 'minor_mana_cache',
name: 'Minor Mana Cache',
type: PotionType.mp,
tier: 1,
healAmount: 20,
healPercent: 0.0,
price: 20,
);
/// Mana Cache - 일반 MP 물약
static const manaCache = Potion(
id: 'mana_cache',
name: 'Mana Cache',
type: PotionType.mp,
tier: 2,
healAmount: 40,
healPercent: 0.10,
price: 60,
);
/// Major Mana Cache - 대형 MP 물약
static const majorManaCache = Potion(
id: 'major_mana_cache',
name: 'Major Mana Cache',
type: PotionType.mp,
tier: 3,
healAmount: 60,
healPercent: 0.20,
price: 160,
);
/// Super Mana Cache - 초대형 MP 물약
static const superManaCache = Potion(
id: 'super_mana_cache',
name: 'Super Mana Cache',
type: PotionType.mp,
tier: 4,
healAmount: 90,
healPercent: 0.30,
price: 400,
);
/// Ultra Mana Cache - 최고급 MP 물약
static const ultraManaCache = Potion(
id: 'ultra_mana_cache',
name: 'Ultra Mana Cache',
type: PotionType.mp,
tier: 5,
healAmount: 150,
healPercent: 0.40,
price: 1000,
);
// ============================================================================
// 물약 목록
// ============================================================================
/// 모든 물약 목록
static const List<Potion> all = [
// HP 물약
minorHealthPatch,
healthPatch,
majorHealthPatch,
superHealthPatch,
ultraHealthPatch,
// MP 물약
minorManaCache,
manaCache,
majorManaCache,
superManaCache,
ultraManaCache,
];
/// HP 물약 목록
static List<Potion> get hpPotions =>
all.where((p) => p.type == PotionType.hp).toList();
/// MP 물약 목록
static List<Potion> get mpPotions =>
all.where((p) => p.type == PotionType.mp).toList();
/// ID로 물약 찾기
static Potion? getById(String id) {
for (final potion in all) {
if (potion.id == id) return potion;
}
return null;
}
/// 티어별 HP 물약
static Potion? getHpPotionByTier(int tier) {
for (final potion in hpPotions) {
if (potion.tier == tier) return potion;
}
return null;
}
/// 티어별 MP 물약
static Potion? getMpPotionByTier(int tier) {
for (final potion in mpPotions) {
if (potion.tier == tier) return potion;
}
return null;
}
/// 레벨에 맞는 HP 물약 티어
static int tierForLevel(int level) {
if (level < 10) return 1;
if (level < 25) return 2;
if (level < 45) return 3;
if (level < 70) return 4;
return 5;
}
}