feat(ui): HP/MP 바 개선 및 전투 시스템 UI 업데이트
- HP/MP 변화 시 플래시 효과 및 변화량 표시 추가 - 전투 중 몬스터 HP 바 표시 기능 추가 - 몬스터 HP 바 Row 오버플로우 버그 수정 (Flexible 적용) - 전투 상태 및 이벤트 모델 개선 - 캐릭터 애니메이션 및 전투 컴포저 업데이트
This commit is contained in:
191
lib/src/core/model/combat_event.dart
Normal file
191
lib/src/core/model/combat_event.dart
Normal file
@@ -0,0 +1,191 @@
|
||||
/// 전투 이벤트 타입 (Combat Event Type)
|
||||
enum CombatEventType {
|
||||
/// 플레이어가 몬스터 공격
|
||||
playerAttack,
|
||||
|
||||
/// 몬스터가 플레이어 공격
|
||||
monsterAttack,
|
||||
|
||||
/// 플레이어 회피
|
||||
playerEvade,
|
||||
|
||||
/// 몬스터 회피
|
||||
monsterEvade,
|
||||
|
||||
/// 플레이어 방패 방어
|
||||
playerBlock,
|
||||
|
||||
/// 플레이어 무기 쳐내기
|
||||
playerParry,
|
||||
|
||||
/// 플레이어 스킬 사용
|
||||
playerSkill,
|
||||
|
||||
/// 플레이어 회복
|
||||
playerHeal,
|
||||
|
||||
/// 플레이어 버프
|
||||
playerBuff,
|
||||
}
|
||||
|
||||
/// 전투 이벤트 (Combat Event)
|
||||
///
|
||||
/// 개별 공격/방어/스킬 사용 등의 전투 행동을 기록
|
||||
class CombatEvent {
|
||||
const CombatEvent({
|
||||
required this.type,
|
||||
required this.timestamp,
|
||||
this.damage = 0,
|
||||
this.healAmount = 0,
|
||||
this.isCritical = false,
|
||||
this.skillName,
|
||||
this.targetName,
|
||||
});
|
||||
|
||||
/// 이벤트 타입
|
||||
final CombatEventType type;
|
||||
|
||||
/// 발생 시간 (elapsedMs)
|
||||
final int timestamp;
|
||||
|
||||
/// 데미지 (0이면 미스/회피)
|
||||
final int damage;
|
||||
|
||||
/// 회복량 (회복 이벤트용)
|
||||
final int healAmount;
|
||||
|
||||
/// 크리티컬 여부
|
||||
final bool isCritical;
|
||||
|
||||
/// 사용한 스킬 이름 (스킬 이벤트용)
|
||||
final String? skillName;
|
||||
|
||||
/// 대상 이름 (몬스터 또는 플레이어)
|
||||
final String? targetName;
|
||||
|
||||
/// 플레이어 공격 이벤트 생성
|
||||
factory CombatEvent.playerAttack({
|
||||
required int timestamp,
|
||||
required int damage,
|
||||
required String targetName,
|
||||
bool isCritical = false,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerAttack,
|
||||
timestamp: timestamp,
|
||||
damage: damage,
|
||||
targetName: targetName,
|
||||
isCritical: isCritical,
|
||||
);
|
||||
}
|
||||
|
||||
/// 몬스터 공격 이벤트 생성
|
||||
factory CombatEvent.monsterAttack({
|
||||
required int timestamp,
|
||||
required int damage,
|
||||
required String attackerName,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.monsterAttack,
|
||||
timestamp: timestamp,
|
||||
damage: damage,
|
||||
targetName: attackerName,
|
||||
);
|
||||
}
|
||||
|
||||
/// 플레이어 회피 이벤트 생성
|
||||
factory CombatEvent.playerEvade({
|
||||
required int timestamp,
|
||||
required String attackerName,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerEvade,
|
||||
timestamp: timestamp,
|
||||
targetName: attackerName,
|
||||
);
|
||||
}
|
||||
|
||||
/// 몬스터 회피 이벤트 생성
|
||||
factory CombatEvent.monsterEvade({
|
||||
required int timestamp,
|
||||
required String targetName,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.monsterEvade,
|
||||
timestamp: timestamp,
|
||||
targetName: targetName,
|
||||
);
|
||||
}
|
||||
|
||||
/// 플레이어 방패 방어 이벤트 생성
|
||||
factory CombatEvent.playerBlock({
|
||||
required int timestamp,
|
||||
required int reducedDamage,
|
||||
required String attackerName,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerBlock,
|
||||
timestamp: timestamp,
|
||||
damage: reducedDamage,
|
||||
targetName: attackerName,
|
||||
);
|
||||
}
|
||||
|
||||
/// 플레이어 무기 쳐내기 이벤트 생성
|
||||
factory CombatEvent.playerParry({
|
||||
required int timestamp,
|
||||
required int reducedDamage,
|
||||
required String attackerName,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerParry,
|
||||
timestamp: timestamp,
|
||||
damage: reducedDamage,
|
||||
targetName: attackerName,
|
||||
);
|
||||
}
|
||||
|
||||
/// 스킬 사용 이벤트 생성
|
||||
factory CombatEvent.playerSkill({
|
||||
required int timestamp,
|
||||
required String skillName,
|
||||
required int damage,
|
||||
required String targetName,
|
||||
bool isCritical = false,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerSkill,
|
||||
timestamp: timestamp,
|
||||
skillName: skillName,
|
||||
damage: damage,
|
||||
targetName: targetName,
|
||||
isCritical: isCritical,
|
||||
);
|
||||
}
|
||||
|
||||
/// 회복 이벤트 생성
|
||||
factory CombatEvent.playerHeal({
|
||||
required int timestamp,
|
||||
required int healAmount,
|
||||
String? skillName,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerHeal,
|
||||
timestamp: timestamp,
|
||||
healAmount: healAmount,
|
||||
skillName: skillName,
|
||||
);
|
||||
}
|
||||
|
||||
/// 버프 이벤트 생성
|
||||
factory CombatEvent.playerBuff({
|
||||
required int timestamp,
|
||||
required String skillName,
|
||||
}) {
|
||||
return CombatEvent(
|
||||
type: CombatEventType.playerBuff,
|
||||
timestamp: timestamp,
|
||||
skillName: skillName,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user