using System.Collections; using System.Collections.Generic; using System.Linq; using Unity.Mathematics; using UnityEngine; namespace Ichni.RhythmGame { public abstract class AnimationBase : BaseElement { public BaseElement targetObject; public FlexibleReturnType animationReturnType; //public ICanHaveAnimation target; public void NewInitialize(string elementName, BaseElement targetObject) { base.NewInitialize(elementName); this.targetObject = targetObject; SetParent(this.targetObject); } public virtual void SetTimeDuration(params FlexibleFloat[] flexibleFloats) { List startTimes = new List(); List endTimes = new List(); foreach (FlexibleFloat flexibleFloat in flexibleFloats) { flexibleFloat.Sort(); if (flexibleFloat.animations.Count > 0) { startTimes.Add(flexibleFloat.animations[0].startTime); endTimes.Add(flexibleFloat.animations[^1].endTime); } } timeDurationSubmodule = new TimeDurationSubmodule(startTimes.Min(), endTimes.Max()); } public virtual void SetTimeDuration(float startTime, float endTime) { timeDurationSubmodule = new TimeDurationSubmodule(startTime, endTime); } protected abstract void UpdateAnimation(float songTime); protected virtual void Update() { if (timeDurationSubmodule.CheckTimeInDuration(EditorManager.instance.songModule.songTime)) { UpdateAnimation(EditorManager.instance.songModule.songTime); } } } }