using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; namespace Autohand.Demo{ public class Door : PhysicsGadgetHingeAngleReader { [Header("Door should start closed")] public Rigidbody body; Vector3 closedPosition; Quaternion closedRotation; [Tooltip("The door needs to reach this level of open before it can be reset")] public float minThreshold = 0.05f; public float midThreshold = 0.05f; [Tooltip("The door needs to reach this level of open before it can be reset")] public float maxThreshold = 0.05f; [Space] public UnityEvent OnMax; public UnityEvent OnMid; public UnityEvent OnMin; bool min = false; bool max = false; bool mid = true; private void Awake(){ if(!body && GetComponent()) body = GetComponent(); closedPosition = transform.position; closedRotation = transform.rotation; } protected void FixedUpdate(){ if(!max && mid && GetValue()+maxThreshold >= 1) { Max(); } if(!min && mid && GetValue()-minThreshold <= -1){ Min(); } if (GetValue() <= midThreshold && max && !mid) { Mid(); } if (GetValue() >= -midThreshold && min && !mid) { Mid(); } } void Max(){ mid = false; max = true; OnMax?.Invoke(); } void Mid(){ min = false; max = false; mid = true; OnMid?.Invoke(); } void Min() { min = true; mid = false; OnMin?.Invoke(); } public void ClosedDoor() { transform.position = closedPosition; transform.rotation = closedRotation; if(body.collisionDetectionMode == CollisionDetectionMode.ContinuousDynamic) body.collisionDetectionMode = CollisionDetectionMode.Continuous; body.isKinematic = true; } private void OnDrawGizmosSelected() { if(!body && GetComponent()) body = GetComponent(); } } }