125 lines
No EOL
3.6 KiB
C#
125 lines
No EOL
3.6 KiB
C#
/*
|
|
* Author: Reza, Wai Lam, Mark
|
|
* Date: 10/2/25
|
|
* Description: Verifies whether tasks in the house are completed before going to the next scene
|
|
*/
|
|
|
|
using System.Collections;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
public class LeaveHouseTrigger : MonoBehaviour
|
|
{
|
|
|
|
public string nextSceneName;
|
|
public string day3;
|
|
public GameObject confirmationPanel;
|
|
public TMP_Text warningText;
|
|
public GameObject warningPanel;
|
|
public GameObject nextdayPanel;
|
|
|
|
public CanvasGroup fadeCanvasGroup;
|
|
public float fadeDuration = 1f;
|
|
public float displayDuration = 5f;
|
|
|
|
|
|
// Start is called before the first frame update
|
|
private void Start()
|
|
{
|
|
confirmationPanel.SetActive(false);
|
|
warningText.text = "";
|
|
nextdayPanel.SetActive(false);
|
|
}
|
|
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
if (other.CompareTag("Player")) ShowConfirmationButtons();
|
|
}
|
|
|
|
private void ShowConfirmationButtons()
|
|
{
|
|
// FIXED: possibly refer to purely GameManager.Instance instead of any
|
|
// early bound reference to GameManager because the game manager might
|
|
// not have died fast enough for other scripts to refer to the new
|
|
// GameManager instance
|
|
|
|
// keeping this here for future ref
|
|
// --mark
|
|
|
|
Debug.Log("Current Day in ShowConfirmationButtons: " + GameManager.Instance.CurrentDay);
|
|
confirmationPanel.SetActive(true);
|
|
warningPanel.SetActive(true);
|
|
Debug.Log("Current Day is: " + GameManager.Instance.CurrentDay);
|
|
switch (GameManager.Instance.CurrentDay)
|
|
{
|
|
case 1:
|
|
Debug.Log("Setting text for Day 1");
|
|
warningText.text = "Should I leave the house? I might not have completed everything...";
|
|
break;
|
|
case 2:
|
|
Debug.Log("Setting text for Day 2");
|
|
warningText.text = "Do I even want to go to school...";
|
|
break;
|
|
}
|
|
// can change how long you want the text to show for
|
|
StartCoroutine(HideWarningPanelAfterDelay(7f));
|
|
}
|
|
|
|
private IEnumerator HideWarningPanelAfterDelay(float delay)
|
|
{
|
|
yield return new WaitForSeconds(delay);
|
|
warningPanel.SetActive(false);
|
|
}
|
|
|
|
public void ConfirmLeave()
|
|
{
|
|
// Log player choices
|
|
GameManager.Instance.LogPlayerChoices();
|
|
|
|
// Load the next scene directly without needing to set the last scene
|
|
SceneManager.LoadScene(nextSceneName);
|
|
}
|
|
|
|
public void CancelLeave()
|
|
{
|
|
if (GameManager.Instance.CurrentDay == 2)
|
|
{
|
|
nextdayPanel.SetActive(true);
|
|
StartCoroutine(FadeInAndLoadScene());
|
|
GameManager.Instance.IncrementDay();
|
|
|
|
}
|
|
|
|
confirmationPanel.SetActive(false);
|
|
|
|
}
|
|
|
|
private IEnumerator FadeInAndLoadScene()
|
|
{
|
|
yield return StartCoroutine(Fade(0f, 1f, fadeDuration));
|
|
yield return new WaitForSeconds(displayDuration);
|
|
|
|
SceneManager.LoadScene(day3);
|
|
|
|
yield return new WaitForSeconds(1f); // Small delay to ensure scene transition
|
|
}
|
|
private IEnumerator Fade(float startAlpha, float endAlpha, float duration)
|
|
{
|
|
var elapsed = 0f;
|
|
fadeCanvasGroup.alpha = startAlpha;
|
|
|
|
|
|
while (elapsed < duration)
|
|
{
|
|
elapsed += Time.deltaTime;
|
|
var t = elapsed / duration;
|
|
|
|
fadeCanvasGroup.alpha = Mathf.Lerp(startAlpha, endAlpha, t);
|
|
|
|
yield return null;
|
|
}
|
|
|
|
fadeCanvasGroup.alpha = endAlpha;
|
|
}
|
|
} |