feat(animation): 공격 속도 기반 동적 애니메이션 페이즈
- CombatEvent에 attackDelayMs 필드 추가 - ProgressService에서 전투 이벤트에 공격 속도 전달 - AsciiAnimationCard에서 공격 속도 기반 페이즈 프레임 수 계산 - 200ms tick 기준으로 동적 프레임 수 (최소 2, 최대 10)
This commit is contained in:
@@ -1118,6 +1118,7 @@ class ProgressService {
|
||||
skillName: selectedSkill.name,
|
||||
damage: skillResult.result.damage,
|
||||
targetName: monsterStats.name,
|
||||
attackDelayMs: playerStats.attackDelayMs,
|
||||
),
|
||||
);
|
||||
} else if (selectedSkill != null && selectedSkill.isDot) {
|
||||
@@ -1144,6 +1145,7 @@ class ProgressService {
|
||||
skillName: selectedSkill.name,
|
||||
damage: skillResult.result.damage,
|
||||
targetName: monsterStats.name,
|
||||
attackDelayMs: playerStats.attackDelayMs,
|
||||
),
|
||||
);
|
||||
} else if (selectedSkill != null && selectedSkill.isHeal) {
|
||||
@@ -1206,6 +1208,7 @@ class ProgressService {
|
||||
damage: result.damage,
|
||||
targetName: monsterStats.name,
|
||||
isCritical: result.isCritical,
|
||||
attackDelayMs: playerStats.attackDelayMs,
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -1257,6 +1260,7 @@ class ProgressService {
|
||||
timestamp: timestamp,
|
||||
damage: result.damage,
|
||||
attackerName: monsterStats.name,
|
||||
attackDelayMs: monsterStats.attackDelayMs,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ class CombatEvent {
|
||||
this.isCritical = false,
|
||||
this.skillName,
|
||||
this.targetName,
|
||||
this.attackDelayMs,
|
||||
});
|
||||
|
||||
/// 이벤트 타입
|
||||
@@ -72,12 +73,17 @@ class CombatEvent {
|
||||
/// 대상 이름 (몬스터 또는 플레이어)
|
||||
final String? targetName;
|
||||
|
||||
/// 공격자의 공격 속도 (ms)
|
||||
/// 애니메이션 페이즈 지속 시간 계산에 사용
|
||||
final int? attackDelayMs;
|
||||
|
||||
/// 플레이어 공격 이벤트 생성
|
||||
factory CombatEvent.playerAttack({
|
||||
required int timestamp,
|
||||
required int damage,
|
||||
required String targetName,
|
||||
bool isCritical = false,
|
||||
int? attackDelayMs,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerAttack,
|
||||
@@ -85,6 +91,7 @@ class CombatEvent {
|
||||
damage: damage,
|
||||
targetName: targetName,
|
||||
isCritical: isCritical,
|
||||
attackDelayMs: attackDelayMs,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -93,12 +100,14 @@ class CombatEvent {
|
||||
required int timestamp,
|
||||
required int damage,
|
||||
required String attackerName,
|
||||
int? attackDelayMs,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.monsterAttack,
|
||||
timestamp: timestamp,
|
||||
damage: damage,
|
||||
targetName: attackerName,
|
||||
attackDelayMs: attackDelayMs,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -161,6 +170,7 @@ class CombatEvent {
|
||||
required int damage,
|
||||
required String targetName,
|
||||
bool isCritical = false,
|
||||
int? attackDelayMs,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerSkill,
|
||||
@@ -169,6 +179,7 @@ class CombatEvent {
|
||||
damage: damage,
|
||||
targetName: targetName,
|
||||
isCritical: isCritical,
|
||||
attackDelayMs: attackDelayMs,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user