internal IReadOnlyList <AbstractHealthDamageEvent> GetConditionHitDamageEvents(AbstractActor target, ParsedEvtcLog log, long start, long end) { if (_conditionHitDamageEventsPerPhasePerTarget == null) { _conditionHitDamageEventsPerPhasePerTarget = new CachingCollectionWithTarget <List <AbstractHealthDamageEvent> >(log); } if (!_conditionHitDamageEventsPerPhasePerTarget.TryGetValue(start, end, target, out List <AbstractHealthDamageEvent> dls)) { dls = GetHitDamageEvents(target, log, start, end).Where(x => x.ConditionDamageBased(log)).ToList(); _conditionHitDamageEventsPerPhasePerTarget.Set(start, end, target, dls); } return(dls); }
public abstract IReadOnlyList <AbstractBreakbarDamageEvent> GetBreakbarDamageEvents(AbstractActor target, ParsedEvtcLog log, long start, long end);
public abstract List <AbstractDamageEvent> GetDamageTakenLogs(AbstractActor target, ParsedEvtcLog log, long start, long end);
public abstract IReadOnlyList <AbstractHealthDamageEvent> GetDamageTakenEvents(AbstractActor target, ParsedEvtcLog log, long start, long end);
/*public List<DamageLog> getHealingLogs(ParsedEvtcLog log, long start, long end) * { * List<DamageLog> res = new List<DamageLog>(); * foreach (Minion minion in this) * { * res.AddRange(minion.getHealingLogs(log, start, end)); * } * return res; * }*/ public override IReadOnlyList <AbstractHealthDamageEvent> GetDamageTakenEvents(AbstractActor target, ParsedEvtcLog log, long start, long end) { if (DamageTakenEvents == null) { DamageTakenEvents = new List <AbstractHealthDamageEvent>(); foreach (NPC minion in _minionList) { DamageTakenEvents.AddRange(minion.GetDamageTakenEvents(null, log, 0, log.FightData.FightEnd)); } DamageTakenEventsBySrc = DamageTakenEvents.GroupBy(x => x.From).ToDictionary(x => x.Key, x => x.ToList()); } if (target != null) { if (DamageTakenEventsBySrc.TryGetValue(target.AgentItem, out List <AbstractHealthDamageEvent> list)) { return(list.Where(x => x.Time >= start && x.Time <= end).ToList()); } else { return(new List <AbstractHealthDamageEvent>()); } } return(DamageTakenEvents.Where(x => x.Time >= start && x.Time <= end).ToList()); }