75 lines
2.4 KiB
C#
75 lines
2.4 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI; // Needed for UI
|
|
using System.Collections;
|
|
using TMPro; // Optional, if you want "Sweet Dreams" text
|
|
|
|
public class WinZone : MonoBehaviour
|
|
{
|
|
[Header("UI Settings")]
|
|
public GameObject blackScreenPanel;
|
|
public TextMeshProUGUI winText; // Assign a TMP text that says "Sweet Dreams"
|
|
public float fadeDuration = 3f;
|
|
|
|
[Header("Audio")]
|
|
public AudioSource playerAudioSource; // To stop footsteps/breathing
|
|
public AudioClip winSound; // Gentle lullaby or peaceful sound
|
|
|
|
private bool hasWon = false;
|
|
|
|
void OnTriggerEnter(Collider other)
|
|
{
|
|
if (other.CompareTag("Player") && !hasWon)
|
|
{
|
|
// Only win if lights are OFF (optional check)
|
|
if (GameManager.Instance != null && !GameManager.Instance.AreAnyLightsOn())
|
|
{
|
|
StartCoroutine(WinSequence(other.gameObject));
|
|
}
|
|
}
|
|
}
|
|
|
|
IEnumerator WinSequence(GameObject player)
|
|
{
|
|
hasWon = true;
|
|
Debug.Log("Player reached the top! Winning...");
|
|
|
|
// 1. Disable Player Controls immediately
|
|
PlayerController pc = player.GetComponent<PlayerController>();
|
|
if (pc != null) pc.enabled = false;
|
|
|
|
// 2. Disable the Staircase Curse so they don't die while fading
|
|
StaircaseCurse curse = FindObjectOfType<StaircaseCurse>();
|
|
if (curse != null) curse.enabled = false;
|
|
|
|
// 3. Play Win Sound
|
|
if (playerAudioSource != null && winSound != null)
|
|
playerAudioSource.PlayOneShot(winSound);
|
|
|
|
// 4. Fade to Black
|
|
if (blackScreenPanel != null)
|
|
{
|
|
blackScreenPanel.SetActive(true);
|
|
CanvasGroup cg = blackScreenPanel.GetComponent<CanvasGroup>();
|
|
|
|
// If no CanvasGroup exists, add one
|
|
if (cg == null) cg = blackScreenPanel.AddComponent<CanvasGroup>();
|
|
|
|
float timer = 0f;
|
|
while (timer < fadeDuration)
|
|
{
|
|
timer += Time.deltaTime;
|
|
cg.alpha = timer / fadeDuration; // Fade from 0 to 1
|
|
yield return null;
|
|
}
|
|
cg.alpha = 1f;
|
|
}
|
|
|
|
// 5. Show Text
|
|
if (winText != null) winText.gameObject.SetActive(true);
|
|
|
|
// 6. Quit Game (or wait and load menu)
|
|
yield return new WaitForSeconds(3f);
|
|
Debug.Log("Quitting Application...");
|
|
Application.Quit();
|
|
}
|
|
} |