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); }
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); }