protected virtual void GrabMechanicAngleChanged(object sender, RotateTransformGrabAttachEventArgs e)
 {
     if (controlInteractableObject != null && !controlInteractableObject.IsGrabbed())
     {
         ForceRestingPosition();
         ForceSnapToStep();
     }
     if (processAtEndOfFrame == null)
     {
         EmitEvents();
     }
 }
 private void MaxAngleExited(object o, RotateTransformGrabAttachEventArgs e)
 {
     OnMaxAngleExited.Invoke(o, e);
 }
 private void MinAngleReached(object o, RotateTransformGrabAttachEventArgs e)
 {
     OnMinAngleReached.Invoke(o, e);
 }
 private void AngleChanged(object o, RotateTransformGrabAttachEventArgs e)
 {
     OnAngleChanged.Invoke(o, e);
 }
 //Runs when lever is exiting its minimum angle
 void OnMinAngleExited(object sender, RotateTransformGrabAttachEventArgs e)
 {
     //Ensures our MinAngleReached UnityEvent is only called once per lever flip
     MinAngleExited?.Invoke();
 }