Exemple #1
0
        private static void RecalculateFinalDamage(bool clearCache = false)
        {
            CleanDamageCache();
            totalDamageTaken.ResetDamage();
            totalDamageDealt.ResetDamage();

            finalDamage = new Dictionary <string, TotalDamageInfo>();
            foreach (var damageInfo in dmgCache)
            {
                TotalDamageInfo totalDamage;
                if (finalDamage.TryGetValue(damageInfo.sourceName, out totalDamage))
                {
                    IncrementTotalDamage(damageInfo, ref totalDamage);
                }
                else
                {
                    totalDamage = new TotalDamageInfo(damageInfo.sourceID, damageInfo.sourceName);
                    IncrementTotalDamage(damageInfo, ref totalDamage);
                    finalDamage.Add(damageInfo.sourceName, totalDamage);
                }
                IncrementTotalDamage(damageInfo, ref totalDamageTaken);
            }

            myFinalDamage = new Dictionary <int, TotalDamageInfo>();
            foreach (var damageInfo in myDmgCache)
            {
                TotalDamageInfo totalDamage;
                if (myFinalDamage.TryGetValue(damageInfo.sourceID, out totalDamage))
                {
                    IncrementTotalDamage(damageInfo, ref totalDamage);
                }
                else
                {
                    totalDamage = new TotalDamageInfo(damageInfo.sourceID, damageInfo.sourceName);
                    IncrementTotalDamage(damageInfo, ref totalDamage);
                    myFinalDamage.Add(damageInfo.sourceID, totalDamage);
                }
                IncrementTotalDamage(damageInfo, ref totalDamageDealt);
            }

            orderedFinalDamage   = finalDamage.Values.OrderByDescending(value => value.totalDamage).ToList();
            orderedMyFinalDamage = myFinalDamage.Values.OrderByDescending(value => value.totalDamage).ToList();

            if (clearCache)
            {
                Utility.DelayAction.Add(5000, () => dmgCache.Clear());
                Utility.DelayAction.Add(5000, () => myDmgCache.Clear());
            }
        }