Exemple #1
0
        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);
        }
Exemple #2
0
 /// <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))
Exemple #4
0
 // Graph
 public IReadOnlyList <int> Get1SDamageList(ParsedEvtcLog log, long start, long end, AbstractSingleActor target, ParserHelper.DamageType damageType)
 {
     return(_graphHelper.Get1SDamageList(log, start, end, target, damageType));
 }