You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
| 
								 
											1 year ago
										 
									 | 
							
								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<Rigidbody>())
							 | 
						||
| 
								 | 
							
								                body = GetComponent<Rigidbody>();
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            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<Rigidbody>())
							 | 
						||
| 
								 | 
							
								                body = GetComponent<Rigidbody>();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |