using System.Collections; using System.Collections.Generic; using System.Linq; using Dreamteck.Splines; using Lean.Pool; using UniRx; using UnityEngine; namespace Ichni.RhythmGame { /// /// 在轨道上根据百分比进行运动的点 /// public class TrackPercentPoint : BaseElement { public Track track; public SplinePositioner trackPositioner; public FlexibleFloat trackPercent; private bool isBeyond1 = false; public static TrackPercentPoint GenerateElement(string elementName, Track track, FlexibleFloat trackPercent) { TrackPercentPoint point = LeanPool.Spawn(EditorManager.instance.basePrefabs.emptyObject, track.transform).AddComponent(); point.NewInitialize(elementName, track, trackPercent); point.SetParent(track); point.isBeyond1 = trackPercent.animations.Any(animation => animation.endValue > 1);//判断是否有超过1的动画,超过1将会循环 return point; } private void NewInitialize(string elementName, Track track, FlexibleFloat trackPercent) { base.NewInitialize(elementName); this.track = track; this.trackPositioner = gameObject.AddComponent(); this.trackPositioner.spline = track.trackPathSubmodule.path; this.trackPercent = trackPercent; } public void Update() { if (trackPercent.animations.Count > 0) { trackPercent.UpdateFlexibleFloat(EditorManager.instance.songModule.songTime); if (trackPercent.returnType == FlexibleReturnType.MiddleExecuting) { float finalValue = trackPercent.value; if (isBeyond1) { finalValue -= Mathf.Floor(finalValue); } trackPositioner.SetPercent(finalValue); } } } } }