import 'package:asciineverdie/src/core/model/combat_event.dart'; import 'package:asciineverdie/src/core/model/equipment_item.dart'; import 'package:asciineverdie/src/core/model/equipment_slot.dart'; import 'package:asciineverdie/src/core/model/item_stats.dart'; /// 사망 원인 (Death Cause) enum DeathCause { /// 몬스터에 의한 사망 monster, /// 자해 스킬에 의한 사망 selfDamage, /// 환경 피해에 의한 사망 environment, } /// 사망 정보 (Phase 4) /// /// 사망 시점의 정보와 상실한 아이템을 기록 class DeathInfo { const DeathInfo({ required this.cause, required this.killerName, required this.lostEquipmentCount, required this.goldAtDeath, required this.levelAtDeath, required this.timestamp, this.lostItemName, this.lostItemSlot, this.lostItemRarity, this.lostItem, this.lastCombatEvents = const [], }); /// 사망 원인 final DeathCause cause; /// 사망시킨 몬스터/원인 이름 final String killerName; /// 상실한 장비 개수 (0 또는 1) final int lostEquipmentCount; /// 제물로 바친 아이템 이름 (null이면 없음) final String? lostItemName; /// 제물로 바친 아이템 슬롯 (null이면 없음) final EquipmentSlot? lostItemSlot; /// 제물로 바친 아이템 희귀도 (null이면 없음) final ItemRarity? lostItemRarity; /// 상실한 장비 전체 정보 (광고 부활 시 복구용) final EquipmentItem? lostItem; /// 사망 시점 골드 final int goldAtDeath; /// 사망 시점 레벨 final int levelAtDeath; /// 사망 시각 (밀리초) final int timestamp; /// 사망 직전 전투 이벤트 (최대 10개) final List lastCombatEvents; DeathInfo copyWith({ DeathCause? cause, String? killerName, int? lostEquipmentCount, String? lostItemName, EquipmentSlot? lostItemSlot, ItemRarity? lostItemRarity, EquipmentItem? lostItem, int? goldAtDeath, int? levelAtDeath, int? timestamp, List? lastCombatEvents, }) { return DeathInfo( cause: cause ?? this.cause, killerName: killerName ?? this.killerName, lostEquipmentCount: lostEquipmentCount ?? this.lostEquipmentCount, lostItemName: lostItemName ?? this.lostItemName, lostItemSlot: lostItemSlot ?? this.lostItemSlot, lostItemRarity: lostItemRarity ?? this.lostItemRarity, lostItem: lostItem ?? this.lostItem, goldAtDeath: goldAtDeath ?? this.goldAtDeath, levelAtDeath: levelAtDeath ?? this.levelAtDeath, timestamp: timestamp ?? this.timestamp, lastCombatEvents: lastCombatEvents ?? this.lastCombatEvents, ); } }