public AnimatedCastEvent(CombatItem startItem, CombatItem endItem, AgentData agentData, SkillData skillData) : this(startItem, agentData, skillData) { ActualDuration = endItem.Value; _scaledActualDuration = endItem.BuffDmg; if (Skill.ID == SkillItem.DodgeId) { ExpectedDuration = 750; ActualDuration = 750; _scaledActualDuration = 0; } double nonScaledToScaledRatio = 1.0; if (_scaledActualDuration > 0) { nonScaledToScaledRatio = (double)_scaledActualDuration / ActualDuration; Acceleration = GeneralHelper.Clamp(2.0 * ((Math.Log(nonScaledToScaledRatio) - _lowerLimit) / _diffLimit) - 1.0, -1.0, 1.0); } switch (endItem.IsActivation) { case ParseEnum.Activation.CancelCancel: Status = AnimationStatus.Iterrupted; SavedDuration = -ActualDuration; break; case ParseEnum.Activation.Reset: Status = AnimationStatus.Full; break; case ParseEnum.Activation.CancelFire: int nonScaledExpectedDuration = (int)Math.Round(ExpectedDuration / nonScaledToScaledRatio); SavedDuration = Math.Max(nonScaledExpectedDuration - ActualDuration, 0); Status = AnimationStatus.Reduced; break; } }