using UnityEngine; using FSA = UnityEngine.Serialization.FormerlySerializedAsAttribute; namespace Lean.Common { /// This component adds auto Yaw rotation to the attached LeanPitchYaw component. [RequireComponent(typeof(LeanPitchYaw))] [HelpURL(LeanHelper.PlusHelpUrlPrefix + "LeanPitchYawAutoRotate")] [AddComponentMenu(LeanHelper.ComponentPathPrefix + "Pitch Yaw Auto Rotate")] public class LeanPitchYawAutoRotate : MonoBehaviour { /// The amount of seconds until auto rotation begins after no touches. public float Delay { set { delay = value; } get { return delay; } } [FSA("Delay")] [SerializeField] private float delay = 5.0f; /// The speed of the yaw changes. public float Speed { set { speed = value; } get { return speed; } } [FSA("Speed")] [SerializeField] private float speed = 5.0f; /// The speed the auto rotation goes from 0% to 100%. public float Acceleration { set { acceleration = value; } get { return acceleration; } } [FSA("Acceleration")] [SerializeField] private float acceleration = 1.0f; [SerializeField] private float idleTime; [SerializeField] private float strength; [SerializeField] private float expectedPitch; [SerializeField] private float expectedYaw; [System.NonSerialized] private LeanPitchYaw cachedPitchYaw; protected virtual void OnEnable() { cachedPitchYaw = GetComponent(); } protected virtual void LateUpdate() { if (cachedPitchYaw.Pitch == expectedPitch && cachedPitchYaw.Yaw == expectedYaw) { idleTime += Time.deltaTime; if (idleTime >= delay) { strength += acceleration * Time.deltaTime; cachedPitchYaw.Yaw += Mathf.Clamp01(strength) * speed * Time.deltaTime; //cachedPitchYaw.UpdateRotation(); } } else { idleTime = 0.0f; strength = 0.0f; } expectedPitch = cachedPitchYaw.Pitch; expectedYaw = cachedPitchYaw.Yaw; } } } #if UNITY_EDITOR namespace Lean.Common.Editor { using TARGET = LeanPitchYawAutoRotate; [UnityEditor.CanEditMultipleObjects] [UnityEditor.CustomEditor(typeof(TARGET))] public class LeanPitchYawAutoRotate_Editor : LeanEditor { protected override void OnInspector() { TARGET tgt; TARGET[] tgts; GetTargets(out tgt, out tgts); Draw("delay", "The amount of seconds until auto rotation begins after no touches."); Draw("speed", "The speed of the yaw changes."); Draw("acceleration", "The speed the auto rotation goes from 0% to 100%."); } } } #endif