//Ani.SpeedUpOrStopThen(fun.smoothDeltaTime*3,() => {}) public static IAnimation SpeedUpOrStopThen(this IAnimation ani, double seconds, Action then) { if (ani == null || ani.IsFinished) { then(); return(ani); } var timeAni = ani as ITimeBased; if (timeAni != null) { var timePlusSeconds = Time.time + seconds; // if hasn't started yet if (timeAni.Range.From > Time.time) { timeAni.Range.To = timeAni.Range.From + (float)seconds; } // if in the middle else if (timePlusSeconds >= timeAni.Range.From && timePlusSeconds <= timeAni.Range.To) { timeAni.Range.ResizeRemainingTo(seconds); } ani.Then(then); return(ani); } ani.Finish(); then(); return(ani); }