using UnityEngine; namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse { public class DTMNoteGenerateExtend : NoteGenerateEffect { #region [效果属性与状态] Effect Fields & States private Hold hold; private DTMNoteVisualHold noteVisualHold; public float targetStartPercent, targetEndPercent; public float startPercent, endPercent; #endregion #region [初始化] Initialization public DTMNoteGenerateExtend(NoteVisualBase noteVisual, float generateTime, float effectTime) { this.note = noteVisual.note; this.hold = note as Hold; this.noteVisual = noteVisual; this.noteVisualHold = noteVisual as DTMNoteVisualHold; this.generateTime = generateTime; this.effectTime = effectTime; } #endregion #region [效果核心逻辑] Core Effect Logic private void UpdateHold() { hold.trackPositioner.SetPercent(startPercent); noteVisualHold.meshGenerator.SetClipRange(startPercent, endPercent); //noteVisualHold.extrude.Range = new Vector2(startPercent, endPercent); noteVisualHold.headPoint.SetPercent(startPercent); noteVisualHold.tailPoint.SetPercent(endPercent); } public override void Recover() { noteVisualHold.noteMain.SetActive(false); } public override void PreExecute() { TrackTimeSubmoduleMovable trackTimeSubmoduleMovable = hold.track.trackTimeSubmodule as TrackTimeSubmoduleMovable; targetStartPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.exactJudgeTime); targetEndPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.holdEndTime); startPercent = targetStartPercent; endPercent = targetStartPercent; noteVisual.noteMain.SetActive(true); } public override void Execute() { float e = AnimationCurveEvaluator.Evaluate(AnimationCurveType.OutQuad, effectProgressPercent); startPercent = targetStartPercent; endPercent = Mathf.Lerp(targetStartPercent, targetEndPercent, e); UpdateHold(); } public override void Adjust() { startPercent = targetStartPercent; endPercent = targetEndPercent; UpdateHold(); } #endregion } }