Files
ichni_Creator_Studio/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs
SoulliesOfficial 4cd90eaede 基础内容-9
为次级模块增加存档类,仍在思考框架中
2025-02-06 23:01:44 -05:00

89 lines
2.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Dreamteck.Splines;
using Unity.VisualScripting;
using UnityEngine;
namespace Ichni.RhythmGame
{
public class TrackRendererSubmodule : TrackSubmodule
{
public MeshGenerator meshGenerator;
public MeshRenderer meshRenderer;
public Material renderMaterial;
public TrackRendererSubmodule(Track track) : base(track)
{
this.track = track;
this.track.trackRendererSubmodule = this;
}
public override void SaveBM()
{
throw new System.NotImplementedException();
}
}
public class TrackRendererSubmoduleAutoOrient : TrackRendererSubmodule
{
public SplineRenderer splineRenderer;
public TrackRendererSubmoduleAutoOrient(Track track, Material material = null) : base(track)
{
this.splineRenderer = track.AddComponent<SplineRenderer>();
this.meshRenderer = splineRenderer.GetComponent<MeshRenderer>();
this.meshGenerator = splineRenderer;
this.renderMaterial = material == null ? EditorManager.instance.basePrefabs.defaultTrackMaterial : material;
this.splineRenderer.spline = track.trackPathSubmodule.path;
this.splineRenderer.clipFrom = 0;
this.splineRenderer.clipTo = 1;
this.meshRenderer.material = renderMaterial;
this.splineRenderer.color = Color.white;
}
public override void InitialRefresh()
{
if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable)
{
splineRenderer.clipFrom = 0;
splineRenderer.clipTo = 0;
}
}
public override void SaveBM()
{
matchedBM = new Beatmap.TrackRendererSubmoduleAutoOrient_BM(attachedElement, this);
}
}
namespace Beatmap
{
public class TrackRendererSubmoduleAutoOrient_BM : Submodule_BM
{
public string renderMaterialName;
public TrackRendererSubmoduleAutoOrient_BM()
{
}
public TrackRendererSubmoduleAutoOrient_BM(BaseElement attachedElement,
TrackRendererSubmodule trackRendererSubmodule) : base(attachedElement)
{
renderMaterialName = trackRendererSubmodule.renderMaterial.name;
}
public override void ExecuteBM()
{
attachedElement = GetElement(attachedElementGuid);
(attachedElement as Track).trackRendererSubmodule =
new TrackRendererSubmodule(attachedElement as Track);
}
public override void DuplicateBM(BaseElement attached)
{
(attached as Track).trackRendererSubmodule = new TrackRendererSubmodule(attached as Track);
}
}
}
}