public float CalculateDamage()
        {
            float damage = 0;

            rawDamage       = DamageAmount;
            increasedDamage = 0;
            reducedDamage   = 0;

            foreach (DictionaryEntry entry in PrePassive.Modifications)
            {
                CriticalInfo modifier = entry.Value as CriticalInfo;
                modifier.Critical(this);
            }

            foreach (DictionaryEntry entry in Critical.Modifications)
            {
                CriticalInfo modifier = entry.Value as CriticalInfo;
                modifier.Critical(this);
            }

            foreach (DictionaryEntry entry in Evasion.Modifications)
            {
                EvasionInfo modifier = entry.Value as EvasionInfo;
                modifier.Evade(this);
            }

            foreach (DictionaryEntry entry in Reduction.Modifications)
            {
                ReductionInfo modifier = entry.Value as ReductionInfo;
                modifier.Reduce(this);
            }

            foreach (DictionaryEntry entry in PostPassive.Modifications)
            {
                CriticalInfo modifier = entry.Value as CriticalInfo;
                modifier.Critical(this);
            }

            return(damage);
        }
Beispiel #2
0
        static MyAnimationClip ReadClip(BinaryReader reader)
        {
            MyAnimationClip clip = new MyAnimationClip();

            clip.Name     = reader.ReadString();
            clip.Duration = reader.ReadDouble();

            int bonesCount = reader.ReadInt32();

            while (bonesCount-- > 0)
            {
                MyAnimationClip.Bone bone = new MyAnimationClip.Bone();
                bone.Name = reader.ReadString();

                int keyframesCount = reader.ReadInt32();
                while (keyframesCount-- > 0)
                {
                    MyAnimationClip.Keyframe keyframe = new MyAnimationClip.Keyframe();
                    keyframe.Time        = reader.ReadDouble();
                    keyframe.Rotation    = ImportQuaternion(reader);
                    keyframe.Translation = ImportVector3(reader);
                    bone.Keyframes.Add(keyframe);
                }

                clip.Bones.Add(bone);

                int originalCount = bone.Keyframes.Count;
                int newCount      = 0;
                if (originalCount > 3)
                {
                    if (USE_LINEAR_KEYFRAME_REDUCTION)
                    {
                        LinkedList <MyAnimationClip.Keyframe> linkedList = new LinkedList <MyAnimationClip.Keyframe>();
                        foreach (var kf in bone.Keyframes)
                        {
                            linkedList.AddLast(kf);
                        }
                        //LinearKeyframeReduction(linkedList, 0.000001f, 0.985f);
                        //PercentageKeyframeReduction(linkedList, 0.9f);
                        LinearKeyframeReduction(linkedList, TinyLength, TinyCosAngle);
                        bone.Keyframes.Clear();
                        bone.Keyframes.AddArray(linkedList.ToArray());
                        newCount = bone.Keyframes.Count;
                    }
                    if (LINEAR_KEYFRAME_REDUCTION_STATS)
                    {
                        ReductionInfo ri = new ReductionInfo()
                        {
                            BoneName      = bone.Name,
                            OriginalKeys  = originalCount,
                            OptimizedKeys = newCount
                        };

                        List <ReductionInfo> riList;
                        if (!ReductionStats.TryGetValue(m_debugAssetName, out riList))
                        {
                            riList = new List <ReductionInfo>();
                            ReductionStats.Add(m_debugAssetName, riList);
                        }

                        riList.Add(ri);
                    }
                }

                CalculateKeyframeDeltas(bone.Keyframes);
            }

            return(clip);
        }