Files
asciinevrdie/lib/src/core/model/race_traits.dart
JiWoong Sul 99f5b74802 feat(game): 게임 시스템 전면 개편 및 다국어 지원 확장
## 스킬 시스템 개선
- skill_data.dart: 스킬 데이터 구조 전면 개편 (+1176 라인)
- skill_service.dart: 스킬 발동 로직 확장 및 버프 시스템 연동
- skill.dart: 스킬 모델 개선, 쿨다운/효과 타입 추가

## Canvas 애니메이션 리팩토링
- battle_composer.dart 삭제 (레거시 위젯 기반 렌더러)
- monster_colors.dart 삭제 (AsciiCell 색상 시스템으로 통합)
- canvas_battle_composer.dart: z-index 정렬 (몬스터 z=1, 캐릭터 z=2, 이펙트 z=3)
- ascii_cell.dart, ascii_layer.dart: 코드 정리

## UI/UX 개선
- hp_mp_bar.dart: l10n 적용, 몬스터 HP 바 컴팩트화
- death_overlay.dart: 사망 화면 개선
- equipment_stats_panel.dart: 장비 스탯 표시 확장
- active_buff_panel.dart: 버프 패널 개선
- notification_overlay.dart: 알림 시스템 개선

## 다국어 지원 확장
- game_text_l10n.dart: 게임 텍스트 통합 (+758 라인)
- 한국어/일본어/영어/중국어 번역 업데이트
- ARB 파일 동기화

## 게임 로직 개선
- progress_service.dart: 진행 로직 리팩토링
- combat_calculator.dart: 전투 계산 로직 개선
- stat_calculator.dart: 스탯 계산 시스템 개선
- story_service.dart: 스토리 진행 로직 개선

## 기타
- theme_preferences.dart 삭제 (미사용)
- 테스트 파일 업데이트
- class_data.dart: 클래스 데이터 정리
2025-12-22 19:00:58 +09:00

91 lines
1.9 KiB
Dart

/// 스탯 타입 열거형 (stat type)
enum StatType { str, con, dex, intelligence, wis, cha }
/// 패시브 능력 타입 (passive ability type)
enum PassiveType {
/// 경험치 배율 보너스
expBonus,
/// 마법 데미지 배율 보너스
magicDamageBonus,
/// 방어력 배율 보너스
defenseBonus,
/// 크리티컬 확률 보너스
criticalBonus,
/// HP 배율 보너스
hpBonus,
/// MP 배율 보너스
mpBonus,
/// 사망 시 장비 보존
deathEquipmentPreserve,
}
/// 패시브 능력 (passive ability)
///
/// 종족이나 클래스가 제공하는 수동적 효과
class PassiveAbility {
const PassiveAbility({
required this.type,
required this.value,
this.description = '',
});
/// 패시브 타입
final PassiveType type;
/// 효과 값 (배율의 경우 0.1 = 10%)
final double value;
/// 설명
final String description;
}
/// 종족 특성 (race traits)
///
/// 각 종족이 가진 고유한 스탯 보정과 패시브 능력
class RaceTraits {
const RaceTraits({
required this.raceId,
required this.name,
required this.statModifiers,
this.passives = const [],
this.expMultiplier = 1.0,
});
/// 종족 식별자
final String raceId;
/// 종족 이름 (표시용)
final String name;
/// 스탯 보정치 맵
final Map<StatType, int> statModifiers;
/// 패시브 능력 목록
final List<PassiveAbility> passives;
/// 경험치 배율 (1.0 = 100%)
final double expMultiplier;
/// 특정 스탯의 보정치 반환
int getModifier(StatType type) => statModifiers[type] ?? 0;
/// 특정 패시브 타입의 값 반환 (없으면 0)
double getPassiveValue(PassiveType type) {
for (final passive in passives) {
if (passive.type == type) return passive.value;
}
return 0.0;
}
/// 특정 패시브 보유 여부
bool hasPassive(PassiveType type) {
return passives.any((p) => p.type == type);
}
}