forked from cgvr/DeltaVR
67 lines
1.6 KiB
C#
67 lines
1.6 KiB
C#
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
public class ReleasableButton : MonoBehaviour
|
|
{
|
|
public delegate void OnButtonPressedDelegate();
|
|
public event OnButtonPressedDelegate OnButtonPressed;
|
|
|
|
public Transform movableParts;
|
|
public float moveDuration = 0.25f;
|
|
public float moveAmount = 0.05f;
|
|
|
|
private float upPositionY;
|
|
private float downPositionY;
|
|
private bool isButtonDown;
|
|
|
|
private void Awake()
|
|
{
|
|
upPositionY = movableParts.localPosition.y;
|
|
downPositionY = movableParts.localPosition.y - moveAmount;
|
|
isButtonDown = false;
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
|
|
}
|
|
|
|
private void OnCollisionEnter(Collision collision)
|
|
{
|
|
if (!isButtonDown && collision.gameObject.tag.EndsWith("Hand"))
|
|
{
|
|
Activate();
|
|
OnButtonPressed?.Invoke();
|
|
}
|
|
}
|
|
|
|
private void OnCollisionExit(Collision collision)
|
|
{
|
|
if (isButtonDown && collision.gameObject.tag.EndsWith("Hand"))
|
|
{
|
|
Deactivate();
|
|
}
|
|
}
|
|
|
|
private void Activate()
|
|
{
|
|
movableParts.DOLocalMoveY(downPositionY, moveDuration);
|
|
isButtonDown = true;
|
|
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Click, gameObject);
|
|
}
|
|
|
|
private void Deactivate()
|
|
{
|
|
movableParts.DOLocalMoveY(upPositionY, moveDuration);
|
|
isButtonDown = false;
|
|
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Click, gameObject);
|
|
}
|
|
}
|