wirm/Game/Assets/Scripts/LeaveHouseTrigger.cs

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;
}
}