using System; using System.Collections; using System.Collections.Generic; using Dreamteck.Splines; using Ichni.RhythmGame.Beatmap; 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 bool motionApplyRotation; public Vector3 motionEulerAngles; public static TrackHeadPoint GenerateElement(string elementName, Guid id, List tags, bool isFirstGenerated, Track track, bool motionApplyRotation, Vector3 motionEulerAngles) { TrackHeadPoint head = Instantiate(GameManager.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; head.motionApplyRotation = motionApplyRotation; head.trackPositioner.motion.applyRotation = motionApplyRotation; head.motionEulerAngles = motionEulerAngles; head.trackPositioner.motion.rotationOffset = motionEulerAngles; return head; } public override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); } public void Update() { if (track.timeDurationSubmodule.CheckTimeInDuration(GameManager.instance.songTime)) { track.trackPathSubmodule.UpdatePoint(transform, trackTimeSubmoduleMovable.headPercent); //trackPositioner.SetPercent(trackTimeSubmoduleMovable.headPercent); } } } public partial class TrackHeadPoint { public override void SaveBM() { matchedBM = new TrackHeadPoint_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM, motionApplyRotation, motionEulerAngles); } } namespace Beatmap { public class TrackHeadPoint_BM : GameElement_BM { public bool motionApplyRotation = false; public Vector3 motionEulerAngles; public TrackHeadPoint_BM() { } public TrackHeadPoint_BM(string elementName, Guid elementGuid, List tags, GameElement_BM attachedElement, bool motionApplyRotation, Vector3 motionEulerAngles) : base(elementName, elementGuid, tags, attachedElement) { this.motionApplyRotation = motionApplyRotation; this.motionEulerAngles = motionEulerAngles; } public override void ExecuteBM() { matchedElement = TrackHeadPoint.GenerateElement(elementName, elementGuid, tags, false, GetElement(attachedElementGuid) as Track, motionApplyRotation, motionEulerAngles); } } } }