import 'package:asciineverdie/src/core/model/equipment_slot.dart'; import 'package:asciineverdie/src/core/model/hall_of_fame.dart'; /// 아레나 대전 정보 /// /// 도전자와 상대의 정보, 양방향 베팅 슬롯을 포함 class ArenaMatch { const ArenaMatch({ required this.challenger, required this.opponent, required this.challengerBettingSlot, required this.opponentBettingSlot, }); /// 도전자 (내 캐릭터) final HallOfFameEntry challenger; /// 상대 캐릭터 final HallOfFameEntry opponent; /// 도전자 베팅 슬롯 (승리 시 상대에게서 빼앗을 슬롯) final EquipmentSlot challengerBettingSlot; /// 상대 베팅 슬롯 (상대 승리 시 도전자에게서 빼앗을 슬롯) final EquipmentSlot opponentBettingSlot; /// 도전자 순위 int get challengerRank => 0; // ArenaService에서 계산 /// 상대 순위 int get opponentRank => 0; // ArenaService에서 계산 /// 기존 bettingSlot 호환용 (deprecated) @Deprecated('Use challengerBettingSlot instead') EquipmentSlot get bettingSlot => challengerBettingSlot; } /// 아레나 대전 결과 class ArenaMatchResult { const ArenaMatchResult({ required this.match, required this.isVictory, required this.turns, required this.updatedChallenger, required this.updatedOpponent, }); /// 대전 정보 final ArenaMatch match; /// 도전자 승리 여부 final bool isVictory; /// 전투 턴 수 final int turns; /// 장비 교환 후 업데이트된 도전자 final HallOfFameEntry updatedChallenger; /// 장비 교환 후 업데이트된 상대 final HallOfFameEntry updatedOpponent; } /// 아레나 전투 턴 (애니메이션용) class ArenaCombatTurn { ArenaCombatTurn({ this.challengerDamage, this.opponentDamage, required this.challengerHp, required this.opponentHp, required this.challengerHpMax, required this.opponentHpMax, this.challengerMp, this.opponentMp, this.challengerMpMax, this.opponentMpMax, this.isChallengerCritical = false, this.isOpponentCritical = false, this.isChallengerEvaded = false, this.isOpponentEvaded = false, this.isChallengerBlocked = false, this.isOpponentBlocked = false, this.challengerSkillUsed, this.opponentSkillUsed, this.challengerHealAmount, this.opponentHealAmount, }) : timestamp = DateTime.now().microsecondsSinceEpoch; /// 턴 식별용 타임스탬프 final int timestamp; /// 도전자가 입힌 데미지 (null이면 공격 안 함) final int? challengerDamage; /// 상대가 입힌 데미지 (null이면 공격 안 함) final int? opponentDamage; /// 도전자 현재 HP final int challengerHp; /// 상대 현재 HP final int opponentHp; /// 도전자 최대 HP final int challengerHpMax; /// 상대 최대 HP final int opponentHpMax; /// 도전자 현재 MP final int? challengerMp; /// 상대 현재 MP final int? opponentMp; /// 도전자 최대 MP final int? challengerMpMax; /// 상대 최대 MP final int? opponentMpMax; /// 도전자 크리티컬 여부 final bool isChallengerCritical; /// 상대 크리티컬 여부 final bool isOpponentCritical; /// 도전자 회피 여부 final bool isChallengerEvaded; /// 상대 회피 여부 final bool isOpponentEvaded; /// 도전자 블록 여부 final bool isChallengerBlocked; /// 상대 블록 여부 final bool isOpponentBlocked; /// 도전자 사용 스킬명 (null이면 기본 공격) final String? challengerSkillUsed; /// 상대 사용 스킬명 (null이면 기본 공격) final String? opponentSkillUsed; /// 도전자 회복량 final int? challengerHealAmount; /// 상대 회복량 final int? opponentHealAmount; }