From 292a9fd6c4c9bc14e67ab0fb1e2e45e6433938b6 Mon Sep 17 00:00:00 2001
From: Malik Rafsanjani <pro.malikakbar2357@gmail.com>
Date: Sat, 15 Apr 2023 12:52:59 +0700
Subject: [PATCH] feat: show ui save on quest finish

---
 Assets/Scripts/Quest/Temple/Temple.cs        | 21 +++++++++++++++--
 Assets/Scripts/SaveLoad/SaveDialogHandler.cs | 11 ++++++++-
 Assets/Scripts/SaveLoad/SavePlace.cs         |  3 ++-
 Assets/Scripts/States/GlobalStateManager.cs  | 24 ++++++++++++++++++--
 4 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/Assets/Scripts/Quest/Temple/Temple.cs b/Assets/Scripts/Quest/Temple/Temple.cs
index 51d4d0c..4272a6e 100644
--- a/Assets/Scripts/Quest/Temple/Temple.cs
+++ b/Assets/Scripts/Quest/Temple/Temple.cs
@@ -40,6 +40,20 @@ public class Temple : MonoBehaviour
 
     public bool OnQuest { get => onQuest; }
 
+    private SaveDialogHandler _saveDialog;
+    public SaveDialogHandler saveDialog
+    {
+        get
+        {
+            if (_saveDialog == null)
+            {
+                _saveDialog = GameObject.Find("HUDCanvas").GetComponentInChildren<SaveDialogHandler>();
+            }
+
+            return _saveDialog;
+        }
+    }
+
     // Start is called before the first frame update
     void Start()
     {
@@ -69,7 +83,8 @@ public class Temple : MonoBehaviour
 
     private void ExitingQuest()
     {
-        GameControl.control.addCurrency(questNumberEnemy.Reward);
+        var reward = questNumberEnemy.Reward;
+        GameControl.control.addCurrency(reward);
         timer.StopTimer();
         onQuest = false;
         questNumberEnemy = null;
@@ -83,7 +98,7 @@ public class Temple : MonoBehaviour
         }
 
         idxCurrentQuest++;
-        ToastManager.Instance.ShowToast("Quest " + idxCurrentQuest + " is Completed! You got additional coins: " + questNumberEnemy.Reward, 1);
+        ToastManager.Instance.ShowToast("Quest " + idxCurrentQuest + " is Completed! You got additional coins: " + reward, 1);
 
         // retrieve the time
         // add it to the global time
@@ -94,6 +109,8 @@ public class Temple : MonoBehaviour
             + " + " + System.TimeSpan.FromSeconds(questTime).ToString("mm':'ss"), 1);
         GlobalManager.Instance.TotalTime += questTime;
         ToastManager.Instance.ShowToast(System.TimeSpan.FromSeconds(GlobalManager.Instance.TotalTime).ToString("mm':'ss"), 1);
+
+        this.saveDialog.Show();
     }
 
     private void OnTriggerEnter(Collider other)
diff --git a/Assets/Scripts/SaveLoad/SaveDialogHandler.cs b/Assets/Scripts/SaveLoad/SaveDialogHandler.cs
index dd892a8..7f860da 100644
--- a/Assets/Scripts/SaveLoad/SaveDialogHandler.cs
+++ b/Assets/Scripts/SaveLoad/SaveDialogHandler.cs
@@ -99,7 +99,16 @@ public class SaveDialogHandler : MonoBehaviour
     // Update is called once per frame
     void Update()
     {
-        
+        var onquest = GlobalStateManager.Instance.OnQuest;
+        if (onquest)
+        {
+            Close();
+        }
+
+        if (Input.GetKeyDown(KeyCode.Escape))
+        {
+            Close();
+        }
     }
 
     public void Show()
diff --git a/Assets/Scripts/SaveLoad/SavePlace.cs b/Assets/Scripts/SaveLoad/SavePlace.cs
index 20f06d0..05e35ec 100644
--- a/Assets/Scripts/SaveLoad/SavePlace.cs
+++ b/Assets/Scripts/SaveLoad/SavePlace.cs
@@ -33,7 +33,8 @@ public class SavePlace : MonoBehaviour
 
     private void OnTriggerEnter(Collider other)
     {
-        if (other.CompareTag("Player"))
+        var onquest = GlobalStateManager.Instance.OnQuest;
+        if (other.CompareTag("Player") && !onquest)
         {
             ToastManager.Instance.ShowToast("Press B to save", 1);
             onArea = true;
diff --git a/Assets/Scripts/States/GlobalStateManager.cs b/Assets/Scripts/States/GlobalStateManager.cs
index 2b7df16..1d0cf6a 100644
--- a/Assets/Scripts/States/GlobalStateManager.cs
+++ b/Assets/Scripts/States/GlobalStateManager.cs
@@ -9,7 +9,19 @@ public class GlobalStateManager : MonoBehaviour
     public static GlobalStateManager Instance { get; private set; }
     private PlayerWeapons playerWeapons;
     private PlayerHealth playerHealth;
-    private Temple temple;
+    private Temple _temple;
+    private Temple temple
+    {
+        get
+        {
+            if (_temple == null)
+            {
+                _temple = FindObjectOfType<Temple>();
+            }
+
+            return _temple;
+        }
+    }
     private PetHealth petHealth;
     private CheatManager cheatManager;
 
@@ -30,7 +42,7 @@ public class GlobalStateManager : MonoBehaviour
     {
         playerWeapons = FindObjectOfType<PlayerWeapons>();
         playerHealth = FindObjectOfType<PlayerHealth>();
-        temple = FindObjectOfType<Temple>();
+        _temple = FindObjectOfType<Temple>();
         petHealth = FindObjectOfType<PetHealth>();
         cheatManager = FindObjectOfType<CheatManager>();
     }
@@ -90,6 +102,14 @@ public class GlobalStateManager : MonoBehaviour
     }
 
 
+    public bool OnQuest
+    {
+        get
+        {
+            return temple.OnQuest;
+        }
+    }
+
     public string Stats()
     {
         var str = "";
-- 
GitLab