DTM Trail完成

This commit is contained in:
SoulliesOfficial
2025-04-20 03:10:41 -04:00
parent 83241a5814
commit 957b1e3702
10 changed files with 595 additions and 58 deletions

View File

@@ -15,12 +15,13 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
{
public GameObject headPoint, headCircle;
public GameObject trailBody;
public bool isHeadEnabled;
public List<Renderer> renderers;
public ParticleSystem headCircleParticle;
public TrailRenderer trailRenderer { get; set; }
public bool isHeadEnabled;
public FlexibleFloat visibleTimeLength;
public FlexibleBool enableTimes;
public float enableProcessTime = 0.5f;
public float headSize = 1f;
@@ -29,30 +30,55 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public override bool haveEmission => true;
public new static DTMTrail GenerateElement(string elementName, Guid id, List<string> tags,
public static DTMTrail GenerateElement(string elementName, Guid id, List<string> tags,
bool isFirstGenerated, string themeBundleName, string objectName, GameElement parentElement,
bool isStatic, FlexibleBool enableTimes, FlexibleFloat headRotateSpeed, float enableProcessTime,
bool isStatic, FlexibleFloat visibleTimeLength, FlexibleBool enableTimes, FlexibleFloat headRotateSpeed, float enableProcessTime,
float headSize)
{
visibleTimeLength ??= new FlexibleFloat(new List<AnimatedFloat>() { new AnimatedFloat(0, 1, 1, 1, AnimationCurveType.Linear) });
DTMTrail dtmTrail = EnvironmentObject.GenerateElement(elementName, id, tags,
isFirstGenerated, themeBundleName, objectName, parentElement, isStatic).GetComponent<DTMTrail>();
dtmTrail.trailRenderer = dtmTrail.trailBody.GetComponent<TrailRenderer>();
dtmTrail.isHeadEnabled = false;
dtmTrail.visibleTimeLength = visibleTimeLength;
dtmTrail.enableTimes = enableTimes;
dtmTrail.headRotateSpeed = headRotateSpeed;
dtmTrail.enableProcessTime = enableProcessTime;
dtmTrail.headSize = headSize;
dtmTrail.SetUpTweeners();
var rotationBySpeedModule = dtmTrail.headCircleParticle.rotationBySpeed;
rotationBySpeedModule.z = 0;
dtmTrail.SetUpTweeners();
return dtmTrail;
}
public override void SetDefaultSubmodules()
{
base.SetDefaultSubmodules();
colorSubmodule.emissionEnabled = true;
colorSubmodule.originalEmissionColor = Color.white;
colorSubmodule.originalEmissionIntensity = 1;
}
public override void FirstSetUpObject(bool isFirstGenerated)
{
if (isFirstGenerated)
{
enableTimes = new FlexibleBool();
enableTimes.Add(new AnimatedBool(0f, false));
enableTimes.Add(new AnimatedBool(1f, true));
}
var rotationBySpeedModule = headCircleParticle.rotationBySpeed;
rotationBySpeedModule.z = 0;
headPoint.transform.localScale = Vector3.zero;
headCircle.transform.localScale = Vector3.zero;
}
public override void Refresh()
{
base.Refresh();
renderers.ForEach(rend =>
{
if (colorSubmodule.emissionEnabled)
@@ -84,6 +110,12 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
isHeadEnabled = false;
}
visibleTimeLength.UpdateFlexibleFloat(songTime);
if (visibleTimeLength.animations.Count > 0)
{
trailRenderer.time = visibleTimeLength.value;
}
if (isHeadEnabled && headRotateSpeed.animations.Count > 0)
{
headRotateSpeed.UpdateFlexibleFloat(songTime);
@@ -123,9 +155,14 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public void SetUpTweeners()
{
enableHeadSequence?.Kill(true);
disableHeadSequence?.Kill(true);
headBounceSequence?.Kill(true);
enableHeadSequence = DOTween.Sequence();
enableHeadSequence.Append(headPoint.transform.DOScale(headSize, enableProcessTime).SetEase(Ease.OutQuad));
enableHeadSequence.Join(headCircle.transform.DOScale(headSize, enableProcessTime).SetEase(Ease.OutQuad));
enableHeadSequence.OnComplete(()=>Debug.Log("Enable Head"));
enableHeadSequence.SetAutoKill(false);
disableHeadSequence = DOTween.Sequence();
@@ -152,7 +189,7 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public override void SaveBM()
{
matchedBM = new DTMTrail_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM,
themeBundleName, objectName, isStatic, enableTimes, headRotateSpeed, enableProcessTime, headSize);
themeBundleName, objectName, isStatic, visibleTimeLength, enableTimes, headRotateSpeed, enableProcessTime, headSize);
}
public override void SetUpInspector()
@@ -163,6 +200,13 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
var container = inspector.GenerateContainer("DTMTrail");
var subcontainer = container.GenerateSubcontainer(3);
var visibleTimeLengthButton = inspector.GenerateButton(this, subcontainer, "Visible Time Length", () =>
{
var ew = inspector.GenerateCompositeParameterWindow(
this, "Visible Time Length", nameof(visibleTimeLength));
ew.SetAsFlexibleFloat();
});
var enableTimeListButton = inspector.GenerateButton(this, subcontainer, "Enable Head Time List", () =>
{
var ew = inspector.GenerateCompositeParameterWindow(
@@ -176,9 +220,14 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
this, "Head Rotate Speed", nameof(headRotateSpeed));
ew.SetAsFlexibleFloat();
});
var enableProcessTimeInputField =
inspector.GenerateInputField(this, subcontainer, "Enable Process Time", nameof(enableProcessTime))
.AddListenerFunction(SetUpTweeners);
var enableProcessTimeInputField = inspector.GenerateInputField(this, subcontainer, "Enable Process Time", nameof(enableProcessTime));
var headSizeInputField = inspector.GenerateInputField(this, subcontainer, "Head Size", nameof(headSize));
var headSizeInputField =
inspector.GenerateInputField(this, subcontainer, "Head Size", nameof(headSize))
.AddListenerFunction(SetUpTweeners);
}
}
@@ -187,6 +236,7 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
{
public partial class DTMTrail_BM : EnvironmentObject_BM
{
public FlexibleFloat_BM visibleTimeLength;
public FlexibleBool_BM enableTimes;
public float enableProcessTime = 0.5f;
public float headSize = 1f;
@@ -199,10 +249,11 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
}
public DTMTrail_BM(string elementName, Guid elementGuid, List<string> tags, GameElement_BM parentElement,
string themeBundleName, string objectName, bool isStatic, FlexibleBool enableTimes, FlexibleFloat headRotateSpeed,
float enableProcessTime, float headSize):
string themeBundleName, string objectName, bool isStatic, FlexibleFloat visibleTimeLength,
FlexibleBool enableTimes, FlexibleFloat headRotateSpeed, float enableProcessTime, float headSize):
base(elementName, elementGuid, tags, parentElement, themeBundleName, objectName, isStatic)
{
this.visibleTimeLength = visibleTimeLength.ConvertToBM();
this.enableTimes = enableTimes.ConvertToBM();
this.headRotateSpeed = headRotateSpeed.ConvertToBM();
this.enableProcessTime = enableProcessTime;
@@ -212,14 +263,14 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public override void ExecuteBM()
{
matchedElement = DTMTrail.GenerateElement(elementName, elementGuid, tags, false,
themeBundleName, objectName, GetElement(attachedElementGuid), isStatic,
themeBundleName, objectName, GetElement(attachedElementGuid), isStatic, visibleTimeLength?.ConvertToGameType(),
enableTimes.ConvertToGameType(), headRotateSpeed?.ConvertToGameType(), enableProcessTime, headSize);
}
public override GameElement DuplicateBM(GameElement parent)
{
return DTMTrail.GenerateElement(elementName, Guid.NewGuid(), tags, false,
themeBundleName, objectName, parent, isStatic, enableTimes.ConvertToGameType(),
themeBundleName, objectName, parent, isStatic, visibleTimeLength?.ConvertToGameType(), enableTimes.ConvertToGameType(),
headRotateSpeed?.ConvertToGameType(), enableProcessTime, headSize);
}
}

View File

@@ -41,8 +41,6 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public partial class DTMNoteVisual
{
public override void SaveBM()
{
matchedBM = new Beatmap.DTMNoteVisual_BM(elementName, elementGuid, tags,