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#
6 months 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();
|
||
|
}
|
||
|
}
|
||
|
}
|