using UnityEngine; public abstract class Lever : MonoBehaviour, IListener { #region Variables [SerializeField] protected HingeJoint lever; [SerializeField] protected bool invertDirections = false; [Space] [SerializeField] [Range(0f, 1f)] protected float positiveThreshold = 0.5f; [SerializeField] [Range(0f, 1f)] protected float negativeThreshold = 0.5f; [SerializeField] protected bool linkThresholds = false; protected float posThrPrev = 0.8f; public bool Operating { get; set; } = false; #endregion #region Methods protected virtual void Start() { EventManager.Instance.AddListener(EVENT_TYPE.ON_VR_CONTROLMODE_SWITCHED, this); } protected virtual void Update() { if (Operating) ProcessLever(); } public void OnEvent<T>(EVENT_TYPE eventType, Component Sender, T param = default) { switch (eventType) { case EVENT_TYPE.ON_VR_CONTROLMODE_SWITCHED: Operating = false; break; } } protected abstract void ProcessLever(); #if UNITY_EDITOR protected virtual void OnValidate() { if (linkThresholds) { if (positiveThreshold != posThrPrev) negativeThreshold = positiveThreshold; else positiveThreshold = negativeThreshold; posThrPrev = positiveThreshold; } } #endif #endregion }