public double CalcProgress(double progress) { if (progress.IsLessThanOrClose(0.0)) { return(0.0); } if (progress.IsGreaterThanOrClose(1.0)) { return(1.0); } var isAccelerationZero = AccelerationRatio.IsZero(); var isDecelerationZero = DecelerationRatio.IsZero(); if (isAccelerationZero && isDecelerationZero) { return(progress); } if (isAccelerationZero) { return(CalcDeceleration(progress)); } if (isDecelerationZero) { return(CalcAcceleration(progress)); } return(CalcAccelerationDeceleration(progress)); }
/// <summary> /// Dumps the description of this timeline. /// </summary> /// <param name="builder"> /// A StringBuilder that accumulates the description text. /// </param> /// <param name="depth"> /// The depth of recursion for this timeline. /// </param> /// <param name="includeDebugID"> /// Whether or not to include the debug ID in the description. /// </param> internal void BuildInfo(System.Text.StringBuilder builder, int depth, bool includeDebugID) { // Start with the name of the timeline if (includeDebugID) { builder.Append(' ', depth); builder.Append("Timeline "); builder.Append(_debugIdentity); } builder.Append(" ("); builder.Append(GetType().Name); // Build attributes if (Name != null) { builder.Append(", Name=\""); builder.Append(Name); builder.Append("\""); } if (AccelerationRatio != 0.0f) { builder.Append(", AccelerationRatio = "); builder.Append(AccelerationRatio.ToString()); } if (AutoReverse != false) { builder.Append(", AutoReverse = "); builder.Append(AutoReverse.ToString()); } if (DecelerationRatio != 0.0f) { builder.Append(", DecelerationRatio = "); builder.Append(DecelerationRatio.ToString()); } if (Duration != Duration.Automatic) { builder.Append(", Duration = "); builder.Append(Duration.ToString()); } if (FillBehavior != FillBehavior.HoldEnd) { builder.Append(", FillBehavior = "); builder.Append(FillBehavior.ToString()); } if (SpeedRatio != 1.0f) { builder.Append(", Speed = "); builder.Append(SpeedRatio); } builder.Append(")\n"); }