using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UniRx; using Unity.Mathematics; using UnityEngine; using UnityEngine.Events; namespace Ichni.RhythmGame { public class TransformSubmodule : SubmoduleBase { public Vector3 originalPosition; public Vector3 originalEulerAngles; public Vector3 originalScale; public List positionOffset; public List eulerAnglesOffset; public List scaleOffset; public Vector3 currentPosition; public Vector3 currentEulerAngles; public Vector3 currentScale; public bool positionDirtyMark; public bool eulerAnglesDirtyMark; public bool scaleDirtyMark; public bool eulerAnglesOffsetLock; public UnityAction OnPositionChanged; public UnityAction OnEulerAnglesChanged; public UnityAction OnScaleChanged; public TransformSubmodule(BaseElement attachedElement) : base(attachedElement) { this.originalPosition = Vector3.zero; this.originalEulerAngles = Vector3.zero; this.originalScale = Vector3.one; positionOffset = new List(); eulerAnglesOffset = new List(); scaleOffset = new List(); currentPosition = Vector3.zero; currentEulerAngles = Vector3.zero; currentScale = Vector3.one; positionDirtyMark = false; eulerAnglesDirtyMark = false; scaleDirtyMark = false; eulerAnglesOffsetLock = false; attachedElement.SetTransformObserver(); } public TransformSubmodule(BaseElement attachedElement, Vector3 originalPosition, Vector3 originalEulerAngles, Vector3 originalScale) : base(attachedElement) { this.originalPosition = originalPosition; this.originalEulerAngles = originalEulerAngles; this.originalScale = originalScale; positionOffset = new List(); eulerAnglesOffset = new List(); scaleOffset = new List(); currentPosition = originalPosition; currentEulerAngles = originalEulerAngles; currentScale = originalScale; positionDirtyMark = false; eulerAnglesDirtyMark = false; scaleDirtyMark = false; eulerAnglesOffsetLock = false; attachedElement.SetTransformObserver(); } } }