From 87f7a7ac6f36f3b134cf128561783b20cb0823b8 Mon Sep 17 00:00:00 2001 From: Mark Joshwel Date: Sat, 15 Feb 2025 00:14:14 +0800 Subject: [PATCH] game(scripts): standardise my stuff --- Game/Assets/Scripts/GoToSchool.cs | 216 ++++++++++++++---------------- Game/Assets/Scripts/HelpBox.cs | 67 ++++++--- 2 files changed, 149 insertions(+), 134 deletions(-) diff --git a/Game/Assets/Scripts/GoToSchool.cs b/Game/Assets/Scripts/GoToSchool.cs index 7f54d1b..6b0afcf 100644 --- a/Game/Assets/Scripts/GoToSchool.cs +++ b/Game/Assets/Scripts/GoToSchool.cs @@ -1,88 +1,114 @@ /* -Author: Wai Lam and Reza -Date: 12/2/25 -Description: Go to school -*/ + * Author: Wai Lam and Reza + * Date: 12/2/25 + * Description: Go to school + */ + using System.Collections; -using System.Collections.Generic; -using UnityEngine; using TMPro; +using UnityEngine; using UnityEngine.SceneManagement; public class GoToSchool : MonoBehaviour { - private GameManager gameManager; - // public PostProcessingManager PostProcessingManager; + // ReSharper disable once GrammarMistakeInComment + // public PostProcessingManager PostProcessingManager; 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 float fadeDuration = 1f; // Duration for fade in/out + public float displayDuration = 5f; // Time the UI stays fully visible public AudioSource[] audioSources; - private bool atPond = false; - private bool hasTriggered = false; // Prevent multiple triggers - public AudioLoop audioLoop; - - public ParticleSystem[] particleEffects; - - // Defines UI references - [Header("UI References")] - public GameObject storyPanelUI; - public TMP_Text storyText; - - [Header("Triggers")] - public Collider parkPondTrigger; // Assign in Inspector - public Collider schoolTrigger; // Assign in Inspector - public ResetPosition xrRig; - void Awake() + public ParticleSystem[] particleEffects; + + // Defines UI references + [Header("UI References")] public GameObject storyPanelUI; + + public TMP_Text storyText; + + [Header("Triggers")] public Collider parkPondTrigger; // Assign in Inspector + + public Collider schoolTrigger; // Assign in Inspector + + public MemoriseInitialPosition xrRig; + + private bool _atPond; + private GameManager _gameManager; + private bool _hasTriggered; // Prevent multiple triggers + + private void Awake() { Debug.Log("IM AWAKE"); - // DontDestroyOnLoad(gameObject); - gameManager = GameManager.Instance; // Reference to GameManager instance - Debug.Log("currentday: " + gameManager.currentDay); + _gameManager = GameManager.Instance; // Reference to GameManager instance + Debug.Log("current day: " + _gameManager.CurrentDay); + if (storyPanelUI == null) storyPanelUI = GameObject.Find("Story Panel"); // Use the exact name if (storyText == null) storyText = FindObjectOfType(); // Finds the first TMP_Text in the scene - + if (storyPanelUI != null) storyPanelUI.SetActive(true); - - if (gameManager.currentDay == 1) - { - if (storyText != null) - { - storyText.text = "I guess I should head to school now..."; - StartCoroutine(ClearMessageAfterSeconds(7f)); - } - - if (audioLoop != null) - { - audioLoop.StartAudioLoop(); - } - } - if (gameManager.currentDay == 2) + switch (_gameManager.CurrentDay) { - if (storyText != null) + case 1: { - storyText.text = "I need to calm down first... maybe going to the park pond would help..."; - StartCoroutine(ClearMessageAfterSeconds(7f)); + if (storyText != null) + { + storyText.text = "I guess I should head to school now..."; + StartCoroutine(ClearMessageAfterSeconds(7f)); + } + + if (audioLoop != null) audioLoop.StartAudioLoop(); + break; } - - foreach (ParticleSystem effect in particleEffects) + case 2: { - effect.gameObject.SetActive(true); // Ensure the GameObject is active - effect.Play(); // Play each particle system + if (storyText != null) + { + storyText.text = "I need to calm down first... maybe going to the park pond would help..."; + StartCoroutine(ClearMessageAfterSeconds(7f)); + } + + foreach (var effect in particleEffects) + { + effect.gameObject.SetActive(true); // Ensure the GameObject is active + effect.Play(); // Play each particle system + } + + // PostProcessingManager.Instance.TriggerEffect("Panic"); + break; + } + } + } + + private void OnTriggerEnter(Collider other) + { + Debug.Log("Triggered by: " + other.gameObject.name); + switch (_gameManager.CurrentDay) + { + // Player arrives at the pond first + // if (!atPond && other == parkPondTrigger) + case 2 when !_atPond && other == parkPondTrigger: + _atPond = true; + StartCoroutine(StayAtPond()); + break; + // if (atPond && other == schoolTrigger) + // Normal case for Day 1 + case 2 when _atPond && other == schoolTrigger: + case 1: + { + _hasTriggered = true; + StartCoroutine(FadeInAndLoadScene()); + _gameManager.GoToSchoolTaskComplete(); + _gameManager.IncrementDay(); + break; } - - // PostProcessingManager.Instance.TriggerEffect("Panic"); - } - } private IEnumerator ClearMessageAfterSeconds(float delay) @@ -92,95 +118,61 @@ public class GoToSchool : MonoBehaviour storyText.text = ""; } - private void OnTriggerEnter(Collider other) - { - - Debug.Log("Triggered by: " + other.gameObject.name); - if (gameManager.currentDay == 2) - { - if (!atPond && other == parkPondTrigger) // Player arrives at pond first - { - atPond = true; - StartCoroutine(StayAtPond()); - } - else if (atPond && other == schoolTrigger) // Player can go to school after pond - { - hasTriggered = true; - StartCoroutine(FadeInAndLoadScene()); - gameManager.GoToSchoolTaskComplete(); - gameManager.IncrementDay(); - } - } - else if (gameManager.currentDay == 1) // Normal case for Day 1 - { - hasTriggered = true; - StartCoroutine(FadeInAndLoadScene()); - gameManager.GoToSchoolTaskComplete(); - gameManager.IncrementDay(); - } - } - private IEnumerator StayAtPond() { storyText.text = "The sound of the water is soothing..."; yield return new WaitForSeconds(7f); - // PostProcessingManager.Instance.StopEffect(); + // PostProcessingManager.Instance.StopEffect(); storyText.text = "I feel a little better now. I should head to school now."; StartCoroutine(ClearMessageAfterSeconds(7f)); } - IEnumerator FadeInAndLoadScene() + private IEnumerator FadeInAndLoadScene() { yield return StartCoroutine(Fade(0f, 1f, fadeDuration)); yield return new WaitForSeconds(displayDuration); - int currentDay = gameManager.currentDay; - string nextScene = currentDay == 2 ? "Day2" : (currentDay == 3 ? "Day3" : "Start"); + var currentDay = _gameManager.CurrentDay; + var nextScene = currentDay switch + { + 2 => "Day2", + 3 => "Day3", + _ => "Start" + }; SceneManager.LoadScene(nextScene); yield return new WaitForSeconds(1f); // Small delay to ensure scene transition - - xrRig.ResetingPosition(); + + xrRig.ResetPosition(); } - IEnumerator Fade(float startAlpha, float endAlpha, float duration) + private IEnumerator Fade(float startAlpha, float endAlpha, float duration) { - float elapsed = 0f; + var elapsed = 0f; fadeCanvasGroup.alpha = startAlpha; - float[] startVolumes = new float[audioSources.Length]; - for (int i = 0; i < audioSources.Length; i++) - { - startVolumes[i] = audioSources[i] != null ? audioSources[i].volume : 1f; - } + var startVolumes = new float[audioSources.Length]; + for (var i = 0; i < audioSources.Length; i++) + startVolumes[i] = audioSources[i] ? audioSources[i].volume : 1f; while (elapsed < duration) { elapsed += Time.deltaTime; - float t = elapsed / duration; + var t = elapsed / duration; fadeCanvasGroup.alpha = Mathf.Lerp(startAlpha, endAlpha, t); - for (int i = 0; i < audioSources.Length; i++) - { - if (audioSources[i] != null) - { + for (var i = 0; i < audioSources.Length; i++) + if (audioSources[i]) audioSources[i].volume = Mathf.Lerp(startVolumes[i], 0f, t); - } - } yield return null; } fadeCanvasGroup.alpha = endAlpha; - - for (int i = 0; i < audioSources.Length; i++) - { - if (audioSources[i] != null) - { - audioSources[i].volume = 0f; - } - } + foreach (var t in audioSources) + if (t) + t.volume = 0f; } } \ No newline at end of file diff --git a/Game/Assets/Scripts/HelpBox.cs b/Game/Assets/Scripts/HelpBox.cs index 2eb1efe..94f4d03 100644 --- a/Game/Assets/Scripts/HelpBox.cs +++ b/Game/Assets/Scripts/HelpBox.cs @@ -1,42 +1,65 @@ +/* + * Author: Mark + * Date: 31/1/25 + * Description: adds a help box to the inspector window + */ // https://discussions.unity.com/t/helpattribute-allows-you-to-use-helpbox-in-the-unity-inspector-window/659414/22 -using UnityEngine; + +using System; using UnityEditor; +using UnityEngine; -public enum HelpBoxMessageType { None, Info, Warning, Error } +public enum HelpBoxMessageType +{ + None, + Info, + Warning, + Error +} -public class HelpBoxAttribute : PropertyAttribute { +public class HelpBoxAttribute : PropertyAttribute +{ + public readonly HelpBoxMessageType MessageType; + public readonly string Text; - public string Text; - public HelpBoxMessageType MessageType; - - public HelpBoxAttribute(string text, HelpBoxMessageType messageType = HelpBoxMessageType.None) { - this.Text = text; - this.MessageType = messageType; + public HelpBoxAttribute(string text, HelpBoxMessageType messageType = HelpBoxMessageType.None) + { + Text = text; + MessageType = messageType; } } [CustomPropertyDrawer(typeof(HelpBoxAttribute))] -public class HelpBoxAttributeDrawer : DecoratorDrawer { - - public override float GetHeight() { - try { - var helpBoxAttribute = attribute as HelpBoxAttribute; - if (helpBoxAttribute == null) return base.GetHeight(); - var helpBoxStyle = (GUI.skin != null) ? GUI.skin.GetStyle("helpbox") : null; - return helpBoxStyle == null ? base.GetHeight() : Mathf.Max(40f, helpBoxStyle.CalcHeight(new GUIContent(helpBoxAttribute.Text), EditorGUIUtility.currentViewWidth) + 4); +public class HelpBoxAttributeDrawer : DecoratorDrawer +{ + public override float GetHeight() + { + try + { + if (attribute is not HelpBoxAttribute helpBoxAttribute) return base.GetHeight(); + var helpBoxStyle = GUI.skin != null ? GUI.skin.GetStyle("helpbox") : null; + return helpBoxStyle == null + ? base.GetHeight() + : Mathf.Max(40f, + helpBoxStyle.CalcHeight(new GUIContent(helpBoxAttribute.Text), EditorGUIUtility.currentViewWidth) + + 4); } - catch (System.ArgumentException) { + catch (ArgumentException) + { return 3 * EditorGUIUtility.singleLineHeight; // Handle Unity 2022.2 bug by returning default value. } } - public override void OnGUI(Rect position) { + public override void OnGUI(Rect position) + { if (attribute is not HelpBoxAttribute helpBoxAttribute) return; EditorGUI.HelpBox(position, helpBoxAttribute.Text, GetMessageType(helpBoxAttribute.MessageType)); } - private static MessageType GetMessageType(HelpBoxMessageType helpBoxMessageType) { - switch (helpBoxMessageType) { + private static MessageType GetMessageType(HelpBoxMessageType helpBoxMessageType) + { + switch (helpBoxMessageType) + { default: case HelpBoxMessageType.None: return MessageType.None; case HelpBoxMessageType.Info: return MessageType.Info; @@ -44,4 +67,4 @@ public class HelpBoxAttributeDrawer : DecoratorDrawer { case HelpBoxMessageType.Error: return MessageType.Error; } } -} +} \ No newline at end of file