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.
		
		
		
		
		
			
		
			
	
	
		
			61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
| 
								 
											1 year ago
										 
									 | 
							
								using UnityEngine;
							 | 
						||
| 
								 | 
							
								using UnityEngine.Events;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Autohand{
							 | 
						||
| 
								 | 
							
								    //THIS MAY NOT WORK AS A GRABBABLE AT THIS TIME - Try PhysicsGadgetSlider instead
							 | 
						||
| 
								 | 
							
								    public class PhysicsGadgetButton : PhysicsGadgetConfigurableLimitReader{
							 | 
						||
| 
								 | 
							
								        bool pressed = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        [Tooltip("The percentage (0-1) from the required value needed to call the event, if threshold is 0.1 OnPressed will be called at 0.9, and OnUnpressed at 0.1"), Min(0.01f)]
							 | 
						||
| 
								 | 
							
								        public float threshold = 0.1f;
							 | 
						||
| 
								 | 
							
								        public bool lockOnPressed = false;
							 | 
						||
| 
								 | 
							
								        [Space]
							 | 
						||
| 
								 | 
							
								        public UnityEvent OnPressed;
							 | 
						||
| 
								 | 
							
								        public UnityEvent OnUnpressed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Vector3 startPos;
							 | 
						||
| 
								 | 
							
								        Vector3 pressedPos;
							 | 
						||
| 
								 | 
							
								        float pressedValue;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        new protected void Start(){
							 | 
						||
| 
								 | 
							
								            base.Start();
							 | 
						||
| 
								 | 
							
								            startPos = transform.localPosition;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        protected void FixedUpdate(){
							 | 
						||
| 
								 | 
							
								            var value = GetValue();
							 | 
						||
| 
								 | 
							
								            if(!pressed && value+threshold >= 1) {
							 | 
						||
| 
								 | 
							
								                Pressed();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if(!lockOnPressed && pressed && value-threshold <= 0){
							 | 
						||
| 
								 | 
							
								                Unpressed();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (value < 0)
							 | 
						||
| 
								 | 
							
								                transform.localPosition = startPos;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (pressed && lockOnPressed && value + threshold < pressedValue)
							 | 
						||
| 
								 | 
							
								                transform.localPosition = pressedPos;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public void Pressed() {
							 | 
						||
| 
								 | 
							
								            pressed = true;
							 | 
						||
| 
								 | 
							
								            pressedValue = GetValue();
							 | 
						||
| 
								 | 
							
								            pressedPos = transform.localPosition;
							 | 
						||
| 
								 | 
							
								            OnPressed?.Invoke();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public void Unpressed(){
							 | 
						||
| 
								 | 
							
								            pressed = false;
							 | 
						||
| 
								 | 
							
								            OnUnpressed?.Invoke();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public void Unlock() {
							 | 
						||
| 
								 | 
							
								            lockOnPressed = false;
							 | 
						||
| 
								 | 
							
								            GetComponent<Rigidbody>().WakeUp();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |