public IReadOnlyList <AbstractHealthDamageEvent> GetHitDamageEvents(AbstractSingleActor target, ParsedEvtcLog log, long start, long end, ParserHelper.DamageType damageType) { if (!_typedHitDamageEvents.TryGetValue(damageType, out CachingCollectionWithTarget <List <AbstractHealthDamageEvent> > hitDamageEventsPerPhasePerTarget)) { hitDamageEventsPerPhasePerTarget = new CachingCollectionWithTarget <List <AbstractHealthDamageEvent> >(log); _typedHitDamageEvents[damageType] = hitDamageEventsPerPhasePerTarget; } if (!hitDamageEventsPerPhasePerTarget.TryGetValue(start, end, target, out List <AbstractHealthDamageEvent> dls)) { dls = GetDamageEvents(target, log, start, end).Where(x => x.HasHit).ToList(); switch (damageType) { case ParserHelper.DamageType.Power: dls.RemoveAll(x => x.ConditionDamageBased(log)); break; case ParserHelper.DamageType.Strike: dls.RemoveAll(x => x is NonDirectHealthDamageEvent); break; case ParserHelper.DamageType.Condition: dls.RemoveAll(x => !x.ConditionDamageBased(log)); break; case ParserHelper.DamageType.StrikeAndCondition: dls.RemoveAll(x => x is NonDirectHealthDamageEvent && !x.ConditionDamageBased(log)); break; case ParserHelper.DamageType.StrikeAndConditionAndLifeLeech: dls.RemoveAll(x => x is NonDirectHealthDamageEvent ndhd && !x.ConditionDamageBased(log) && !ndhd.IsLifeLeech); break; case ParserHelper.DamageType.All: break; default: throw new NotImplementedException("Not implemented damage type " + damageType); } hitDamageEventsPerPhasePerTarget.Set(start, end, target, dls); } return(dls); }
/// <summary> /// cached method for damage modifiers /// </summary> internal IReadOnlyList <AbstractHealthDamageEvent> GetJustActorHitDamageEvents(AbstractSingleActor target, ParsedEvtcLog log, long start, long end, ParserHelper.DamageType damageType) { if (!_typedSelfHitDamageEvents.TryGetValue(damageType, out CachingCollectionWithTarget <List <AbstractHealthDamageEvent> > hitDamageEventsPerPhasePerTarget)) { hitDamageEventsPerPhasePerTarget = new CachingCollectionWithTarget <List <AbstractHealthDamageEvent> >(log); _typedSelfHitDamageEvents[damageType] = hitDamageEventsPerPhasePerTarget; } if (!hitDamageEventsPerPhasePerTarget.TryGetValue(start, end, target, out List <AbstractHealthDamageEvent> dls)) { dls = GetHitDamageEvents(target, log, start, end, damageType).Where(x => x.From == AgentItem).ToList(); hitDamageEventsPerPhasePerTarget.Set(start, end, target, dls); } return(dls); }
public IReadOnlyList <int> Get1SDamageList(ParsedEvtcLog log, long start, long end, AbstractSingleActor target, ParserHelper.DamageType damageType = ParserHelper.DamageType.All) { if (!_damageList1S.TryGetValue(damageType, out CachingCollectionWithTarget <int[]> graphs)) { graphs = new CachingCollectionWithTarget <int[]>(log); _damageList1S[damageType] = graphs; } if (!graphs.TryGetValue(start, end, target, out int[] graph))
// Graph public IReadOnlyList <int> Get1SDamageList(ParsedEvtcLog log, long start, long end, AbstractSingleActor target, ParserHelper.DamageType damageType) { return(_graphHelper.Get1SDamageList(log, start, end, target, damageType)); }