eye-therapy-2 / Assets / Scripts / Interactables / Lever / Lever.cs
Lever.cs
Raw
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
}