using System; using System.Collections; using System.Collections.Generic; using Lean.Pool; using UnityEngine; namespace Ichni.RhythmGame { public class Swirl : AnimationBase { public TransformSubmodule targetTransformSubmodule; public FlexibleFloat eulerAngleX, eulerAngleY, eulerAngleZ; public static Swirl GenerateElement(string elementName, Guid id, List tags, BaseElement targetObject, FlexibleFloat eulerAngleX, FlexibleFloat eulerAngleY, FlexibleFloat eulerAngleZ) { Swirl swirl = Instantiate(EditorManager.instance.basePrefabs.emptyObject).AddComponent(); swirl.Initialize(elementName, id, tags); swirl.targetObject = targetObject; swirl.eulerAngleX = eulerAngleX; swirl.eulerAngleY = eulerAngleY; swirl.eulerAngleZ = eulerAngleZ; swirl.animationReturnType = FlexibleReturnType.Before; if (targetObject.transformSubmodule != null) { swirl.targetTransformSubmodule = targetObject.transformSubmodule; } else { throw new System.Exception("Target object does not have a TransformSubmodule"); } swirl.SetParent(targetObject); swirl.timeDurationSubmodule.SetDuration(eulerAngleX, eulerAngleY, eulerAngleZ); return swirl; } protected override void UpdateAnimation(float songTime) { eulerAngleX.UpdateFlexibleFloat(songTime); eulerAngleY.UpdateFlexibleFloat(songTime); eulerAngleZ.UpdateFlexibleFloat(songTime); if (eulerAngleX.returnType is FlexibleReturnType.MiddleExecuting || eulerAngleY.returnType is FlexibleReturnType.MiddleExecuting || eulerAngleZ.returnType is FlexibleReturnType.MiddleExecuting) { animationReturnType = FlexibleReturnType.MiddleExecuting; Vector3 currentEulerAngles = new Vector3(eulerAngleX.value, eulerAngleY.value, eulerAngleZ.value); targetTransformSubmodule.eulerAnglesOffset.Add(currentEulerAngles); targetTransformSubmodule.eulerAnglesDirtyMark = true; } else { animationReturnType = FlexibleReturnType.MiddleInterval; } } } }