feat(skill): DamageType 및 magAtk/magDef 스킬 시스템 추가
- DamageType enum 추가 (physical/magical) - 스킬별 데미지 타입 지정 기능 구현 - 마법 스킬 데미지에 magAtk/magDef 적용 - 장비 아이템에서 magAtk/magDef 스탯 추출 - 관련 테스트 업데이트
This commit is contained in:
@@ -63,15 +63,22 @@ class SkillService {
|
||||
required MonsterCombatStats monster,
|
||||
required SkillSystemState skillSystem,
|
||||
}) {
|
||||
// 데미지 타입에 따른 공격력/방어력 선택
|
||||
final (attackStat, defenseStat) = _getStatsByDamageType(
|
||||
skill.damageType,
|
||||
player,
|
||||
monster,
|
||||
);
|
||||
|
||||
// 기본 데미지 계산
|
||||
final baseDamage = player.atk * skill.damageMultiplier;
|
||||
final baseDamage = attackStat * skill.damageMultiplier;
|
||||
|
||||
// 버프 효과 적용
|
||||
final buffMods = skillSystem.totalBuffModifiers;
|
||||
final buffedDamage = baseDamage * (1 + buffMods.atkMod);
|
||||
|
||||
// 적 방어력 감소 적용
|
||||
final effectiveMonsterDef = monster.def * (1 - skill.targetDefReduction);
|
||||
final effectiveMonsterDef = defenseStat * (1 - skill.targetDefReduction);
|
||||
|
||||
// 최종 데미지 계산 (방어력 감산 0.3)
|
||||
final finalDamage = (buffedDamage - effectiveMonsterDef * 0.3)
|
||||
@@ -636,15 +643,22 @@ class SkillService {
|
||||
// 실제 MP 비용 계산
|
||||
final actualMpCost = (skill.mpCost * mpMult).round();
|
||||
|
||||
// 데미지 타입에 따른 공격력/방어력 선택
|
||||
final (attackStat, defenseStat) = _getStatsByDamageType(
|
||||
skill.damageType,
|
||||
player,
|
||||
monster,
|
||||
);
|
||||
|
||||
// 기본 데미지 계산 (랭크 배율 적용)
|
||||
final baseDamage = player.atk * skill.damageMultiplier * rankMult;
|
||||
final baseDamage = attackStat * skill.damageMultiplier * rankMult;
|
||||
|
||||
// 버프 효과 적용
|
||||
final buffMods = skillSystem.totalBuffModifiers;
|
||||
final buffedDamage = baseDamage * (1 + buffMods.atkMod);
|
||||
|
||||
// 적 방어력 감소 적용
|
||||
final effectiveMonsterDef = monster.def * (1 - skill.targetDefReduction);
|
||||
final effectiveMonsterDef = defenseStat * (1 - skill.targetDefReduction);
|
||||
|
||||
// 최종 데미지 계산 (방어력 감산 0.3)
|
||||
final finalDamage = (buffedDamage - effectiveMonsterDef * 0.3)
|
||||
@@ -708,4 +722,32 @@ class SkillService {
|
||||
|
||||
return state.copyWith(skillStates: skillStates);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 데미지 타입 헬퍼
|
||||
// ============================================================================
|
||||
|
||||
/// 데미지 타입에 따른 공격력/방어력 스탯 반환
|
||||
///
|
||||
/// [damageType] 스킬의 데미지 타입
|
||||
/// [player] 플레이어 전투 스탯
|
||||
/// [monster] 몬스터 전투 스탯
|
||||
/// Returns: (공격력, 방어력) 튜플
|
||||
(double, double) _getStatsByDamageType(
|
||||
DamageType damageType,
|
||||
CombatStats player,
|
||||
MonsterCombatStats monster,
|
||||
) {
|
||||
return switch (damageType) {
|
||||
DamageType.physical => (player.atk.toDouble(), monster.def.toDouble()),
|
||||
DamageType.magical => (
|
||||
player.magAtk.toDouble(),
|
||||
monster.magDef.toDouble(),
|
||||
),
|
||||
DamageType.hybrid => (
|
||||
(player.atk + player.magAtk) / 2,
|
||||
(monster.def + monster.magDef) / 2,
|
||||
),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user