using System; using System.Collections; using System.Collections.Generic; using Dreamteck.Splines; using Ichni.RhythmGame.Beatmap; using Lean.Pool; using UnityEngine; namespace Ichni.RhythmGame { public partial class TrackHeadPoint : GameElement, IHaveTimeDurationSubmodule { public Track track; public TrackTimeSubmoduleMovable trackTimeSubmoduleMovable; public SplinePositioner trackPositioner; public TimeDurationSubmodule timeDurationSubmodule { get; set; } public static TrackHeadPoint GenerateElement(string elementName, Guid id, List tags, bool isFirstGenerated, Track track) { TrackHeadPoint head = Instantiate(EditorManager.instance.basePrefabs.emptyObject, track.transform) .AddComponent(); head.Initialize(elementName, id, tags, isFirstGenerated, track); head.track = track; head.trackPositioner = head.gameObject.AddComponent(); head.trackPositioner.spline = track.trackPathSubmodule.path; head.trackTimeSubmoduleMovable = track.trackTimeSubmodule as TrackTimeSubmoduleMovable; return head; } protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); submoduleList.Add(timeDurationSubmodule); } public void Update() { if (track.timeDurationSubmodule.CheckTimeInDuration(EditorManager.instance.songModule.songTime)) { trackPositioner.SetPercent(trackTimeSubmoduleMovable.headPercent); } } } public partial class TrackHeadPoint { public override void SaveBM() { matchedBM = new TrackHeadPoint_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM); } } namespace Beatmap { public class TrackHeadPoint_BM : GameElement_BM { public TrackHeadPoint_BM() { } public TrackHeadPoint_BM(string elementName, Guid elementGuid, List tags, GameElement_BM attachedElement) : base(elementName, elementGuid, tags, attachedElement) { } public override void ExecuteBM() { matchedElement = TrackHeadPoint.GenerateElement(elementName, elementGuid, tags, false, GetElement(attachedElementGuid) as Track); } public override GameElement DuplicateBM(GameElement parent) { return TrackHeadPoint.GenerateElement(elementName, elementGuid, tags, false, parent as Track); } } } }