Files
ichni_Creator_Studio/Assets/ThemeBundles/DepartureToMultiverse/Scripts/NoteEffect/DTMNoteGenerateExtend.cs
SoulliesOfficial bbb8057b08 Hold
2025-07-20 13:39:29 -04:00

101 lines
3.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Ichni.Editor;
using Ichni.RhythmGame.Beatmap;
using Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap;
using UnityEngine;
namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
{
public class DTMNoteGenerateExtend : NoteGenerateEffect
{
private Hold hold;
private DTMNoteVisualHold noteVisualHold;
public float targetStartPercent, targetEndPercent;
public float startPercent, endPercent;
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;
}
private void UpdateHold()
{
hold.trackPositioner.SetPercent(startPercent);
noteVisualHold.meshGenerator.SetClipRange(startPercent, endPercent);
noteVisualHold.headPoint.SetPercent(startPercent);
noteVisualHold.tailPoint.SetPercent(endPercent);
}
public override void Recover()
{
noteVisualHold.noteMain.SetActive(false);
}
public override EffectBase_BM ConvertToBM()
{
return new DTMNoteGenerateExtend_BM(effectTime, generateTime);
}
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();
}
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTM Note Generate Expand");
var subcontainer = container.GenerateSubcontainer(3);
var generateTimeField = inspector.GenerateInputField(this, subcontainer, "Generate Time", nameof(generateTime));
var effectTimeField = inspector.GenerateInputField(this, subcontainer, "Effect Time", nameof(effectTime));
}
}
namespace Beatmap
{
public class DTMNoteGenerateExtend_BM : NoteGenerateEffect_BM
{
public DTMNoteGenerateExtend_BM()
{
}
public DTMNoteGenerateExtend_BM(float effectTime, float generateTime) :
base(effectTime, generateTime)
{
}
public override EffectBase ConvertToGameType(GameElement attachedGameElement)
{
return new DTMNoteGenerateExtend(attachedGameElement as NoteVisualBase, generateTime, effectTime);
}
}
}
}