/// <summary> /// 更新 /// 會更新物件位置 /// </summary> protected void UpdateProgress(double currentTime) { //開始 結束 進度 var startProgress = PathPrecentageCounter.CalculatePrecentage(_hitObject.StartTime - currentTime + DelayTime); var endProgress = PathPrecentageCounter.CalculatePrecentage(_hitObject.EndTime - currentTime + DelayTime); //影響程度 var CurveEasingTypesPrecentage = _hitObject.CurveEasingTypesPrecentage; //修正 startProgress = MathHelper.Clamp(startProgress, 0, 1); endProgress = MathHelper.Clamp(endProgress, 0, 1); //根據設定曲線去改變百分比 startProgress = Interpolation.ApplyEasing(_hitObject.CurveEasingTypes, startProgress, 0, 1, 1) * CurveEasingTypesPrecentage + startProgress * (1 - CurveEasingTypesPrecentage); endProgress = Interpolation.ApplyEasing(_hitObject.CurveEasingTypes, endProgress, 0, 1, 1) * CurveEasingTypesPrecentage + endProgress * (1 - CurveEasingTypesPrecentage); //更新開始打擊和放開打擊的位置定義 Components.ForEach(c => c.UpdateProgress(startProgress, endProgress)); }
//update progress public static void UpdateTemplate(this IHasTemplate drawableObject, double currentTime) { //start progress var startProgress = PathPrecentageCounter.CalculatePrecentage(drawableObject.RpObject.StartTime - currentTime + DelayTime, 1); //end progress var endProgress = PathPrecentageCounter.CalculatePrecentage(drawableObject.RpObject.StartTime - currentTime + DelayTime, 1); //影響程度 var CurveEasingTypesPrecentage = 0; //修正 startProgress = MathHelper.Clamp(startProgress, 0, 1); endProgress = MathHelper.Clamp(endProgress, 0, 1); //fix precentage by EasingTypes startProgress = Interpolation.ApplyEasing(Easing.None, startProgress, 0, 1, 1) * CurveEasingTypesPrecentage + startProgress * (1 - CurveEasingTypesPrecentage); endProgress = Interpolation.ApplyEasing(Easing.None, endProgress, 0, 1, 1) * CurveEasingTypesPrecentage + endProgress * (1 - CurveEasingTypesPrecentage); //update all foreach (IComponentUpdateEachFrame single in drawableObject.Components.Where(n => n is IComponentUpdateEachFrame)) { single.UpdateProgress(startProgress, endProgress); } }