game(scripts): standardise BrushTeeth
This commit is contained in:
parent
57333686a3
commit
e4b5522992
1 changed files with 58 additions and 75 deletions
|
@ -5,42 +5,39 @@ Description: Bathroom interaction
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using UnityEngine.XR.Interaction.Toolkit;
|
using UnityEngine.XR.Interaction.Toolkit;
|
||||||
using UnityEngine.XR.Interaction.Toolkit.Interactables;
|
using UnityEngine.XR.Interaction.Toolkit.Interactables;
|
||||||
using UnityEngine.XR.Interaction.Toolkit.Interactors;
|
using UnityEngine.XR.Interaction.Toolkit.Interactors;
|
||||||
using TMPro;
|
|
||||||
|
|
||||||
public class BrushTeeth : MonoBehaviour
|
public class BrushTeeth : MonoBehaviour
|
||||||
{
|
{
|
||||||
private GameManager gameManager;
|
|
||||||
|
|
||||||
public Slider progressBar; // Reference to the Slider (progress bar)
|
public Slider progressBar; // Reference to the Slider (progress bar)
|
||||||
public float progressTime = 5f; // Time for the progress bar to complete
|
public float progressTime = 5f; // Time for the progress bar to complete
|
||||||
private XRGrabInteractable grabInteractable;
|
|
||||||
private float timer = 0f;
|
|
||||||
private bool isGrabbing = false;
|
|
||||||
|
|
||||||
private bool taskCompleted = false;
|
|
||||||
|
|
||||||
// Defines UI references
|
// Defines UI references
|
||||||
[Header("UI References")]
|
[Header("UI References")] public GameObject storyPanelUI;
|
||||||
|
|
||||||
public GameObject storyPanelUI;
|
|
||||||
public TMP_Text storyText;
|
public TMP_Text storyText;
|
||||||
|
|
||||||
// Defines Audio References
|
// Defines Audio References
|
||||||
[Header("Audio References")]
|
[Header("Audio References")] public AudioSource audioSource;
|
||||||
public AudioSource audioSource;
|
|
||||||
public AudioClip brushingSound;
|
public AudioClip brushingSound;
|
||||||
|
private GameManager _gameManager;
|
||||||
|
private XRGrabInteractable _grabInteractable;
|
||||||
|
private bool _isGrabbing;
|
||||||
|
|
||||||
void Start()
|
private bool _taskCompleted;
|
||||||
|
private float _timer;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
{
|
{
|
||||||
grabInteractable = GetComponent<XRGrabInteractable>();
|
_grabInteractable = GetComponent<XRGrabInteractable>();
|
||||||
|
|
||||||
if (grabInteractable == null)
|
if (_grabInteractable == null)
|
||||||
{
|
{
|
||||||
Debug.LogError("XRGrabInteractable component not found on the object!");
|
Debug.LogError("XRGrabInteractable component not found on the object!");
|
||||||
return;
|
return;
|
||||||
|
@ -50,41 +47,43 @@ public class BrushTeeth : MonoBehaviour
|
||||||
progressBar.gameObject.SetActive(false);
|
progressBar.gameObject.SetActive(false);
|
||||||
|
|
||||||
// Subscribe to grab and release events
|
// Subscribe to grab and release events
|
||||||
grabInteractable.selectEntered.AddListener(OnGrab);
|
_grabInteractable.selectEntered.AddListener(OnGrab);
|
||||||
grabInteractable.selectExited.AddListener(OnRelease);
|
_grabInteractable.selectExited.AddListener(OnRelease);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
if (isGrabbing && !taskCompleted)
|
if (!_isGrabbing || _taskCompleted) return;
|
||||||
{
|
|
||||||
timer += Time.deltaTime;
|
|
||||||
progressBar.value = timer / progressTime;
|
|
||||||
|
|
||||||
if (timer >= progressTime)
|
_timer += Time.deltaTime;
|
||||||
|
progressBar.value = _timer / progressTime;
|
||||||
|
|
||||||
|
if (_timer >= progressTime) CompleteProgress();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
CompleteProgress();
|
if (_grabInteractable == null) return;
|
||||||
}
|
|
||||||
}
|
_grabInteractable.selectEntered.RemoveListener(OnGrab);
|
||||||
|
_grabInteractable.selectExited.RemoveListener(OnRelease);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnGrab(SelectEnterEventArgs args)
|
private void OnGrab(SelectEnterEventArgs args)
|
||||||
{
|
{
|
||||||
// Ignore if grabbed by a socket interactor
|
// Ignore if grabbed by a socket interactor
|
||||||
if (args.interactorObject.transform.GetComponent<XRSocketInteractor>() != null)
|
if (args.interactorObject.transform.GetComponent<XRSocketInteractor>() !=
|
||||||
{
|
null) return; // Do nothing if grabbed by a socket
|
||||||
return; // Do nothing if grabbed by a socket
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only show progress bar if NOT grabbed by a socket
|
// Only show progress bar if NOT grabbed by a socket
|
||||||
progressBar.gameObject.SetActive(true);
|
progressBar.gameObject.SetActive(true);
|
||||||
progressBar.value = 0f;
|
progressBar.value = 0f;
|
||||||
timer = 0f;
|
_timer = 0f;
|
||||||
isGrabbing = true;
|
_isGrabbing = true;
|
||||||
|
|
||||||
// Play brushing sound while toothbrush is grabbed, plays only if it isn't playing already
|
// Play brushing sound while toothbrush is grabbed, plays only if it isn't playing already
|
||||||
if (!audioSource.isPlaying)
|
if (audioSource.isPlaying) return;
|
||||||
{
|
|
||||||
audioSource.clip = brushingSound;
|
audioSource.clip = brushingSound;
|
||||||
|
|
||||||
// Loops the sound for as long as the toothbrush is held; allows editable progress time
|
// Loops the sound for as long as the toothbrush is held; allows editable progress time
|
||||||
|
@ -92,35 +91,28 @@ public class BrushTeeth : MonoBehaviour
|
||||||
|
|
||||||
audioSource.Play();
|
audioSource.Play();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void OnRelease(SelectExitEventArgs args)
|
private void OnRelease(SelectExitEventArgs args)
|
||||||
{
|
{
|
||||||
// Stop progress when released, regardless of interactor type
|
// Stop progress when released, regardless of interactor type
|
||||||
progressBar.gameObject.SetActive(false);
|
progressBar.gameObject.SetActive(false);
|
||||||
isGrabbing = false;
|
_isGrabbing = false;
|
||||||
timer = 0f;
|
_timer = 0f;
|
||||||
|
|
||||||
// Stop the brushing sound when the toothbrush is released
|
// Stop the brushing sound when the toothbrush is released
|
||||||
if (audioSource.isPlaying)
|
if (audioSource.isPlaying) audioSource.Stop();
|
||||||
{
|
|
||||||
audioSource.Stop();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CompleteProgress()
|
private void CompleteProgress()
|
||||||
{
|
{
|
||||||
if (taskCompleted) return;
|
if (_taskCompleted) return;
|
||||||
|
|
||||||
taskCompleted = true;
|
_taskCompleted = true;
|
||||||
progressBar.gameObject.SetActive(false);
|
progressBar.gameObject.SetActive(false);
|
||||||
isGrabbing = false;
|
_isGrabbing = false;
|
||||||
|
|
||||||
// Stop the brushing sound when the task is completed
|
// Stop the brushing sound when the task is completed
|
||||||
if (audioSource.isPlaying)
|
if (audioSource.isPlaying) audioSource.Stop();
|
||||||
{
|
|
||||||
audioSource.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
GameManager.Instance.BrushTeethTaskComplete();
|
GameManager.Instance.BrushTeethTaskComplete();
|
||||||
|
|
||||||
|
@ -133,15 +125,6 @@ public class BrushTeeth : MonoBehaviour
|
||||||
Debug.Log("Progress completed!");
|
Debug.Log("Progress completed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
|
||||||
{
|
|
||||||
if (grabInteractable != null)
|
|
||||||
{
|
|
||||||
grabInteractable.selectEntered.RemoveListener(OnGrab);
|
|
||||||
grabInteractable.selectExited.RemoveListener(OnRelease);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private IEnumerator ClearMessageAfterSeconds(float delay)
|
private IEnumerator ClearMessageAfterSeconds(float delay)
|
||||||
{
|
{
|
||||||
// Waits for delay to end and hides the UI
|
// Waits for delay to end and hides the UI
|
||||||
|
|
Loading…
Add table
Reference in a new issue