Compare commits
2 commits
57333686a3
...
337e022356
Author | SHA1 | Date | |
---|---|---|---|
337e022356 | |||
e4b5522992 |
2 changed files with 73 additions and 91 deletions
|
@ -1,46 +1,43 @@
|
|||
/*
|
||||
Author: Wai Lam & Reza
|
||||
Author: Wai Lam & Reza
|
||||
Date: 27/1/25
|
||||
Description: Bathroom interaction
|
||||
*/
|
||||
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.XR.Interaction.Toolkit;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Interactables;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Interactors;
|
||||
using TMPro;
|
||||
|
||||
public class BrushTeeth : MonoBehaviour
|
||||
{
|
||||
private GameManager gameManager;
|
||||
|
||||
public Slider progressBar; // Reference to the Slider (progress bar)
|
||||
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
|
||||
[Header("UI References")]
|
||||
[Header("UI References")] public GameObject storyPanelUI;
|
||||
|
||||
public GameObject storyPanelUI;
|
||||
public TMP_Text storyText;
|
||||
|
||||
|
||||
// Defines Audio References
|
||||
[Header("Audio References")]
|
||||
public AudioSource audioSource;
|
||||
[Header("Audio References")] public AudioSource audioSource;
|
||||
|
||||
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!");
|
||||
return;
|
||||
|
@ -50,80 +47,75 @@ public class BrushTeeth : MonoBehaviour
|
|||
progressBar.gameObject.SetActive(false);
|
||||
|
||||
// Subscribe to grab and release events
|
||||
grabInteractable.selectEntered.AddListener(OnGrab);
|
||||
grabInteractable.selectExited.AddListener(OnRelease);
|
||||
_grabInteractable.selectEntered.AddListener(OnGrab);
|
||||
_grabInteractable.selectExited.AddListener(OnRelease);
|
||||
}
|
||||
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
if (isGrabbing && !taskCompleted)
|
||||
{
|
||||
timer += Time.deltaTime;
|
||||
progressBar.value = timer / progressTime;
|
||||
if (!_isGrabbing || _taskCompleted) return;
|
||||
|
||||
_timer += Time.deltaTime;
|
||||
progressBar.value = _timer / progressTime;
|
||||
|
||||
if (timer >= progressTime)
|
||||
{
|
||||
CompleteProgress();
|
||||
}
|
||||
}
|
||||
if (_timer >= progressTime) CompleteProgress();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (_grabInteractable == null) return;
|
||||
|
||||
_grabInteractable.selectEntered.RemoveListener(OnGrab);
|
||||
_grabInteractable.selectExited.RemoveListener(OnRelease);
|
||||
}
|
||||
|
||||
private void OnGrab(SelectEnterEventArgs args)
|
||||
{
|
||||
// Ignore if grabbed by a socket interactor
|
||||
if (args.interactorObject.transform.GetComponent<XRSocketInteractor>() != null)
|
||||
{
|
||||
return; // Do nothing if grabbed by a socket
|
||||
}
|
||||
if (args.interactorObject.transform.GetComponent<XRSocketInteractor>() !=
|
||||
null) return; // Do nothing if grabbed by a socket
|
||||
|
||||
// Only show progress bar if NOT grabbed by a socket
|
||||
progressBar.gameObject.SetActive(true);
|
||||
progressBar.value = 0f;
|
||||
timer = 0f;
|
||||
isGrabbing = true;
|
||||
|
||||
_timer = 0f;
|
||||
_isGrabbing = true;
|
||||
|
||||
// Play brushing sound while toothbrush is grabbed, plays only if it isn't playing already
|
||||
if (!audioSource.isPlaying)
|
||||
{
|
||||
audioSource.clip = brushingSound;
|
||||
|
||||
// Loops the sound for as long as the toothbrush is held; allows editable progress time
|
||||
audioSource.loop = true;
|
||||
|
||||
audioSource.Play();
|
||||
}
|
||||
if (audioSource.isPlaying) return;
|
||||
|
||||
audioSource.clip = brushingSound;
|
||||
|
||||
// Loops the sound for as long as the toothbrush is held; allows editable progress time
|
||||
audioSource.loop = true;
|
||||
|
||||
audioSource.Play();
|
||||
}
|
||||
|
||||
private void OnRelease(SelectExitEventArgs args)
|
||||
{
|
||||
// Stop progress when released, regardless of interactor type
|
||||
progressBar.gameObject.SetActive(false);
|
||||
isGrabbing = false;
|
||||
timer = 0f;
|
||||
|
||||
_isGrabbing = false;
|
||||
_timer = 0f;
|
||||
|
||||
// Stop the brushing sound when the toothbrush is released
|
||||
if (audioSource.isPlaying)
|
||||
{
|
||||
audioSource.Stop();
|
||||
}
|
||||
if (audioSource.isPlaying) audioSource.Stop();
|
||||
}
|
||||
|
||||
private void CompleteProgress()
|
||||
{
|
||||
if (taskCompleted) return;
|
||||
|
||||
taskCompleted = true;
|
||||
if (_taskCompleted) return;
|
||||
|
||||
_taskCompleted = true;
|
||||
progressBar.gameObject.SetActive(false);
|
||||
isGrabbing = false;
|
||||
|
||||
_isGrabbing = false;
|
||||
|
||||
// Stop the brushing sound when the task is completed
|
||||
if (audioSource.isPlaying)
|
||||
{
|
||||
audioSource.Stop();
|
||||
}
|
||||
|
||||
if (audioSource.isPlaying) audioSource.Stop();
|
||||
|
||||
GameManager.Instance.BrushTeethTaskComplete();
|
||||
|
||||
|
||||
storyPanelUI.SetActive(true);
|
||||
storyText.text = "I should be fresh enough to go to school now...";
|
||||
|
||||
|
@ -133,19 +125,10 @@ public class BrushTeeth : MonoBehaviour
|
|||
Debug.Log("Progress completed!");
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (grabInteractable != null)
|
||||
{
|
||||
grabInteractable.selectEntered.RemoveListener(OnGrab);
|
||||
grabInteractable.selectExited.RemoveListener(OnRelease);
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator ClearMessageAfterSeconds(float delay)
|
||||
{
|
||||
// Waits for delay to end and hides the UI
|
||||
yield return new WaitForSeconds(delay);
|
||||
storyText.text = "";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,32 +1,32 @@
|
|||
/*
|
||||
Author : Wai Lam
|
||||
Date : 13/2/2025
|
||||
Description : Counting days
|
||||
* Author: Wai Lam
|
||||
* Date: 13/2/2025
|
||||
* Description: Counting days
|
||||
*/
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using TMPro;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
public class CanvasFade : MonoBehaviour
|
||||
{
|
||||
public CanvasGroup dayPanel; // Assign the UI Panel
|
||||
public TextMeshProUGUI dayText; // Assign the TextMeshPro UI
|
||||
|
||||
public static event Action OnDayPanelHidden;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (GameManager.Instance != null)
|
||||
{
|
||||
int dayNumber = GameManager.Instance.currentDay;
|
||||
var dayNumber = GameManager.Instance.currentDay;
|
||||
dayText.text = "Day " + dayNumber;
|
||||
}
|
||||
|
||||
StartCoroutine(FadeOutPanel());
|
||||
}
|
||||
|
||||
public static event Action OnDayPanelHidden;
|
||||
|
||||
private IEnumerator FadeOutPanel()
|
||||
{
|
||||
dayPanel.alpha = 1f;
|
||||
|
@ -34,8 +34,8 @@ public class CanvasFade : MonoBehaviour
|
|||
|
||||
yield return new WaitForSeconds(3f); // Display for 3 seconds
|
||||
|
||||
float fadeDuration = 1.5f;
|
||||
float elapsedTime = 0f;
|
||||
const float fadeDuration = 1.5f;
|
||||
var elapsedTime = 0f;
|
||||
|
||||
while (elapsedTime < fadeDuration)
|
||||
{
|
||||
|
@ -45,8 +45,7 @@ public class CanvasFade : MonoBehaviour
|
|||
}
|
||||
|
||||
dayPanel.gameObject.SetActive(false);
|
||||
|
||||
OnDayPanelHidden?.Invoke();
|
||||
|
||||
OnDayPanelHidden?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue