diff --git a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity index e9395d15..7c51c133 100644 --- a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity +++ b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d51c15e14fa0ff9278d97cdc5d86078271412014a9ebac38bc395f4a76a101a -size 68550602 +oid sha256:178278d70491e7cd918ca216dae0bc8f5e9411096b44c44d7198f2ecc5b9bf08 +size 68552814 diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/ReleasableButton.cs b/Assets/_PROJECT/Scripts/ModeGeneration/ReleasableButton.cs new file mode 100644 index 00000000..d2679e28 --- /dev/null +++ b/Assets/_PROJECT/Scripts/ModeGeneration/ReleasableButton.cs @@ -0,0 +1,66 @@ +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); + } +} diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/ReleasableButton.cs.meta b/Assets/_PROJECT/Scripts/ModeGeneration/ReleasableButton.cs.meta new file mode 100644 index 00000000..52f4b1b4 --- /dev/null +++ b/Assets/_PROJECT/Scripts/ModeGeneration/ReleasableButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48207ddbbdf76d642af7251a5bb13936 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/RadioTransmitter.cs b/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/RadioTransmitter.cs index abb1cf31..6c647a3a 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/RadioTransmitter.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/RadioTransmitter.cs @@ -11,7 +11,7 @@ public class RadioTransmitter : XRGrabInteractable [Header("Custom Config")] public FMODWhisperBridge fmodWhisperBridge; - public PushableButton radioButton; + public ReleasableButton radioButton; public TextMeshProUGUI computerScreen; // Start is called before the first frame update