From 5ecaeb1b8b7f4ab99ad1f69d1b496d6459c498d9 Mon Sep 17 00:00:00 2001 From: Malik Rafsanjani <pro.malikakbar2357@gmail.com> Date: Sat, 15 Apr 2023 16:08:19 +0700 Subject: [PATCH] feat: add state save for talked with npcs --- Assets/Scripts/Managers/DialogueManager.cs | 11 +++++++++ Assets/Scripts/Quest/Temple/Temple.cs | 13 +++++++++-- Assets/Scripts/States/GlobalStateManager.cs | 26 ++++++++++++++++++++- Assets/Scripts/States/StateSave.cs | 4 +++- 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/Managers/DialogueManager.cs b/Assets/Scripts/Managers/DialogueManager.cs index 4b5bdfa..0e9b30a 100644 --- a/Assets/Scripts/Managers/DialogueManager.cs +++ b/Assets/Scripts/Managers/DialogueManager.cs @@ -23,6 +23,16 @@ public class DialogueManager : MonoBehaviour public Text npcDialogueBox; public Text playerResponse; + private bool[] hasTalked = new bool[4]; + public bool[] HasTalked + { + get => hasTalked; + set + { + hasTalked = value; + } + } + // Start is called before the first frame update void Start() { @@ -102,6 +112,7 @@ public class DialogueManager : MonoBehaviour private void StartConvo() { + hasTalked[GlobalStateManager.Instance.IdxQuest] = true; isTalking = true; curResponseTracker = 0f; dialogueUI.SetActive(true); diff --git a/Assets/Scripts/Quest/Temple/Temple.cs b/Assets/Scripts/Quest/Temple/Temple.cs index f2e2d99..b43992e 100644 --- a/Assets/Scripts/Quest/Temple/Temple.cs +++ b/Assets/Scripts/Quest/Temple/Temple.cs @@ -64,7 +64,8 @@ public class Temple : MonoBehaviour // Update is called once per frame void Update() { - if (playerOnRange && Input.GetKeyDown(KeyCode.G)) + var hasTalked = GlobalStateManager.Instance.HasTalked[idxCurrentQuest]; + if (playerOnRange && Input.GetKeyDown(KeyCode.G) && hasTalked) { ToastManager.Instance.ShowToast("ENTERING QUEST",1); EnteringQuest(); @@ -121,6 +122,15 @@ public class Temple : MonoBehaviour { if (other.CompareTag("Player")) { + playerOnRange = true; + + var hasTalkeds = GlobalStateManager.Instance.HasTalked; + if (!hasTalkeds[idxCurrentQuest]) + { + ToastManager.Instance.ShowToast("Talk first with wizard", 1); + return; + } + if (onQuest) { ToastManager.Instance.ShowToast("- Good Luck with your Quest -",1); @@ -130,7 +140,6 @@ public class Temple : MonoBehaviour ToastManager.Instance.ShowToast("- Press G to Enter Quest " + (idxCurrentQuest+1) + " - ",1); } - playerOnRange = true; } } diff --git a/Assets/Scripts/States/GlobalStateManager.cs b/Assets/Scripts/States/GlobalStateManager.cs index dbe4210..3aad6a5 100644 --- a/Assets/Scripts/States/GlobalStateManager.cs +++ b/Assets/Scripts/States/GlobalStateManager.cs @@ -24,6 +24,19 @@ public class GlobalStateManager : MonoBehaviour } private PetHealth petHealth; private CheatManager cheatManager; + private DialogueManager dialogueManager; + public DialogueManager DialogueManager + { + get + { + if (dialogueManager == null) + { + dialogueManager = FindObjectOfType<DialogueManager>(); + } + + return dialogueManager; + } + } private void Awake() { @@ -45,6 +58,7 @@ public class GlobalStateManager : MonoBehaviour _temple = FindObjectOfType<Temple>(); petHealth = FindObjectOfType<PetHealth>(); cheatManager = FindObjectOfType<CheatManager>(); + dialogueManager = FindObjectOfType<DialogueManager>(); } public int Money @@ -89,6 +103,15 @@ public class GlobalStateManager : MonoBehaviour } } + public bool[] HasTalked + { + get => DialogueManager.HasTalked; + set + { + DialogueManager.HasTalked = value; + } + } + private PetManager _petManager; public PetManager petManager { @@ -190,7 +213,7 @@ public class GlobalStateManager : MonoBehaviour var metaStateSave = new MetaStateSave("name"); var playerStateSave = new PlayerStateSave(PlayerName, Money, Health, IdxQuest, playerWeapons); var petStateSave = new PetStateSave(PetHealth, (int)GameControl.control.petIdx); - var globalStateSave = new GlobalStateSave(TimePlayed, Cheats); + var globalStateSave = new GlobalStateSave(TimePlayed, Cheats, HasTalked); var state = new StateSave(metaStateSave, playerStateSave, petStateSave, globalStateSave); return state; @@ -237,5 +260,6 @@ public class GlobalStateManager : MonoBehaviour // TODO: global state save GlobalManager.Instance.TimePlayed = state.globalStateSave.timePlayed; cheatManager.loadCheat(state.globalStateSave.cheats); + HasTalked = state.globalStateSave.hasTalked; } } diff --git a/Assets/Scripts/States/StateSave.cs b/Assets/Scripts/States/StateSave.cs index f925f4c..61555a5 100644 --- a/Assets/Scripts/States/StateSave.cs +++ b/Assets/Scripts/States/StateSave.cs @@ -98,11 +98,13 @@ public class GlobalStateSave { public double timePlayed; public bool[] cheats; + public bool[] hasTalked; - public GlobalStateSave(double timePlayed, bool[] cheats) + public GlobalStateSave(double timePlayed, bool[] cheats, bool[] hasTalked) { this.timePlayed = timePlayed; this.cheats = cheats; + this.hasTalked = hasTalked; } public override string ToString() -- GitLab