using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class LeverController : MonoBehaviour { private Transform pivot; //The lever will use a pivot point private Transform grabHand; // ONLY ONE HAND WORKS RIGHT NOW. NEED A SOLUTION! private bool leverGrabbed; private bool eventCalled; private Vector3 handDelta; private Vector3 lastPosition; [SerializeField] private UnityEvent onUp; [SerializeField] private UnityEvent onDown; public float minAngle = 20f; public float maxAngle = 75f; void Awake() { pivot = transform.parent; leverGrabbed = false; pivot.eulerAngles = new Vector3(pivot.eulerAngles.x, pivot.eulerAngles.y, minAngle); } void Update() { if (leverGrabbed) { handDelta = lastPosition - grabHand.position; //The vector of hand movement between frames pivot.RotateAround(pivot.position, pivot.forward, 200 * (handDelta.y)); if(pivot.eulerAngles.z < minAngle) { pivot.eulerAngles = new Vector3(pivot.rotation.x, pivot.rotation.y, minAngle); if (!eventCalled) { onUp.Invoke(); eventCalled = true; } } else if(pivot.eulerAngles.z > maxAngle) { pivot.eulerAngles = new Vector3(pivot.rotation.x, pivot.rotation.y, maxAngle); if (!eventCalled) { onDown.Invoke(); eventCalled = true; } } lastPosition = grabHand.position; } } public void GrabLever(Transform hand) { leverGrabbed = !leverGrabbed; grabHand = hand; handDelta = Vector3.zero; lastPosition = grabHand.position; eventCalled = false; } }