From e5e33bbf87fd51b11b67cbe152cc974e134c3fdd Mon Sep 17 00:00:00 2001 From: rezazfn Date: Thu, 13 Feb 2025 17:16:55 +0800 Subject: [PATCH] game(scripts): trying to do the game loop --- Game/Assets/Scripts/GameManager.cs | 49 +++++++++++++++++------------- Game/Assets/Scripts/GoToSchool.cs | 48 ++++++++++++++++++----------- 2 files changed, 59 insertions(+), 38 deletions(-) diff --git a/Game/Assets/Scripts/GameManager.cs b/Game/Assets/Scripts/GameManager.cs index ab06711..f214e6d 100644 --- a/Game/Assets/Scripts/GameManager.cs +++ b/Game/Assets/Scripts/GameManager.cs @@ -8,6 +8,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; +using UnityEngine.SceneManagement; public class GameManager : MonoBehaviour { @@ -15,9 +16,16 @@ public class GameManager : MonoBehaviour /// Define instance field for accessing the singleton elsewhere /// public static GameManager Instance; - + + // Starts from Day 1 public int currentDay = 1; + // Tracks GoToSchool task status + private bool goToSchool = false; + private bool bedroomCleaned = false; + private bool teethBrushed = false; + private bool floorSweeped = false; + private string lastSceneName; // Defines UI references @@ -25,27 +33,20 @@ public class GameManager : MonoBehaviour public GameObject storyPanelUI; public TMP_Text storyText; - // Trackable Task Completions - private bool bedroomCleaned = false; - private bool teethBrushed = false; - private bool floorSweeped = false; - private bool goToSchool = false; - // Queue for managing messages private Queue messageQueue = new Queue(); private bool isMessageActive = false; - + /// /// Checks if tasks are completed /// public bool IsBedroomCleaned() { return bedroomCleaned; } public bool IsTeethBrushed() { return teethBrushed; } public bool IsFloorSweeped() { return floorSweeped; } - public bool IsGoToSchool() { return goToSchool; } - + /// - /// Enforces singleton behaviour; sets doesn't destroy on load and checks for multiple instances + /// Enforces singleton behavior; sets doesn't destroy on load and checks for multiple instances /// private void Awake() { @@ -62,7 +63,7 @@ public class GameManager : MonoBehaviour Debug.Log("awake as non-singleton instance, destroying self"); Destroy(gameObject); } - + // Try to find UI elements if not set if (storyPanelUI == null) { @@ -116,6 +117,7 @@ public class GameManager : MonoBehaviour Debug.Log("Go To School: " + goToSchool); } + // Checks if all tasks are done before player can go to school public void AreTasksDone() { if (bedroomCleaned && teethBrushed && floorSweeped) @@ -149,19 +151,24 @@ public class GameManager : MonoBehaviour { goToSchool = true; } - + + // Increments the current day by 1 public void IncrementDay() { currentDay++; - } - - public void SetLastScene(string sceneName) - { - lastSceneName = sceneName; + Debug.Log("Day incremented to: " + currentDay); // Debug log for tracking day increment + + // Checks if it's Day 4, then loads the callingChoice scene + if (currentDay > 3) + { + LoadCallingScene(); + } } - public string GetLastScene() + // Loads the callingChoice scene when Day 3 is completed + private void LoadCallingScene() { - return lastSceneName; + Debug.Log("Loading Calling Scene: callingChoice"); + SceneManager.LoadScene("callingChoice"); } -} +} \ No newline at end of file diff --git a/Game/Assets/Scripts/GoToSchool.cs b/Game/Assets/Scripts/GoToSchool.cs index b5ec07b..3baa58e 100644 --- a/Game/Assets/Scripts/GoToSchool.cs +++ b/Game/Assets/Scripts/GoToSchool.cs @@ -11,26 +11,25 @@ using UnityEngine.SceneManagement; public class GoToSchool : MonoBehaviour { private GameManager gameManager; - - + public CanvasGroup fadeCanvasGroup; // Assign in Inspector public float fadeDuration = 1f; // Duration for fade in/out public float displayDuration = 5f; // Time the UI stays fully visible - public string nextSceneName; // Name of the scene to load public AudioSource[] audioSources; private bool hasTriggered = false; // Prevent multiple triggers public AudioLoop audioLoop; + // Defines UI references [Header("UI References")] - public GameObject storyPanelUI; public TMP_Text storyText; - void Start() { + gameManager = GameManager.Instance; // Reference to GameManager instance + if (storyPanelUI == null) storyPanelUI = GameObject.Find("Story Panel"); // Use the exact name @@ -50,15 +49,15 @@ public class GoToSchool : MonoBehaviour { audioLoop.StartAudioLoop(); } - - } + private IEnumerator ClearMessageAfterSeconds(float delay) { // Waits for delay to end and hides the UI yield return new WaitForSeconds(delay); storyText.text = ""; } + private void OnTriggerEnter(Collider other) { // Check if the player entered the trigger @@ -66,12 +65,9 @@ public class GoToSchool : MonoBehaviour { hasTriggered = true; StartCoroutine(FadeInAndLoadScene()); - GameManager.Instance.GoToSchoolTaskComplete(); - } - if (GameManager.Instance != null) - { - GameManager.Instance.IncrementDay(); + // Task completion is noted here + gameManager.GoToSchoolTaskComplete(); } } @@ -82,11 +78,29 @@ public class GoToSchool : MonoBehaviour // Display UI for 5 seconds yield return new WaitForSeconds(displayDuration); - - GameManager.Instance.SetLastScene(SceneManager.GetActiveScene().name); - // Load the next scene - SceneManager.LoadScene(nextSceneName); + // Determine the next scene based on the current day + int currentDay = gameManager.currentDay; + string nextScene; + + switch (currentDay) + { + case 2: + nextScene = "Day2"; + break; + case 3: + nextScene = "Day3"; // need another way to go to day 3 tho bcos they arent going to sch on day 3 + break; + default: + nextScene = "Start"; // Fallback in case of unexpected day value + break; + } + + // Load the determined next scene + SceneManager.LoadScene(nextScene); + + // Increment the day AFTER transitioning to avoid multiple increments + gameManager.IncrementDay(); } IEnumerator Fade(float startAlpha, float endAlpha, float duration) @@ -128,4 +142,4 @@ public class GoToSchool : MonoBehaviour } } } -} +} \ No newline at end of file