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.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(); this.meshRenderer = splineRenderer.GetComponent(); 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(attachedGameElement, this); } public override void SetUpInspector() { } } namespace Beatmap { public class TrackRendererSubmoduleAutoOrient_BM : Submodule_BM { public string renderMaterialName; public TrackRendererSubmoduleAutoOrient_BM() { } public TrackRendererSubmoduleAutoOrient_BM(GameElement attachedElement, TrackRendererSubmodule trackRendererSubmodule) : base(attachedElement) { renderMaterialName = trackRendererSubmodule.renderMaterial.name; } public override void ExecuteBM() { attachedElement = GameElement_BM.GetElement(attachedElementGuid); Track track = attachedElement as Track; track.trackRendererSubmodule = new TrackRendererSubmodule(track);//TODO: Implement Material track.submoduleList.Add(track.trackRendererSubmodule); } public override void DuplicateBM(GameElement attached) { Track track = attached as Track; track.trackRendererSubmodule = new TrackRendererSubmodule(track);//TODO: Implement Material track.submoduleList.Add(track.trackRendererSubmodule); } } } }