using UnityEngine; public class PanelQuestBehaviour : MonoBehaviour { private static PanelQuestBehaviour instance; public static PanelQuestBehaviour Instance { get { return instance; } } private void Start() { instance = this; AttachEvents(); EnableSideQuests(false); } [Header("Main quest container")] [SerializeField] private QuestContainerBehaviour mainQuest; [Header("Side quest container")] [SerializeField] private QuestContainerBehaviour sideQuest; [Header("Container`s RectTransform")] [SerializeField] private RectTransform container; public void SetMainQuest(DataTools.Quest quest) { if (mainQuest.IsAnyToShow) { mainQuest.RemoveQuest(); } mainQuest.SetQuest(quest); SetMainTask(0); } public void DisableTimerOnMain(int taskIndex=-1) { mainQuest.DisableTimerOnTask(taskIndex); } public void SetMainTask(int taskIndex) { mainQuest.SetTaskActive(taskIndex); if(mainQuest.IsAnyToShow) { mainQuest.UpdateTasksForLinearQuestsIncludingHiddenFlag(taskIndex); if (mainQuest.NumOfVisibleTasks == 0) { mainQuest.ShowNearestNonhiddenTask(GameGlobal.Instance.GetQuestIndex()); } } UpdateLayout(); } public void RemoveMainQuest() { mainQuest.Hide(); mainQuest.RemoveQuest(); } public void RemoveSideQuest() { sideQuest.Hide(); sideQuest.RemoveQuest(); } public void SetMainTask(string taskId) { mainQuest.SetTaskActive(taskId); if(mainQuest.IsAnyToShow) { mainQuest.UpdateTasksForLinearQuestsIncludingHiddenFlag(mainQuest.LastActive); if (mainQuest.NumOfVisibleTasks == 0) { mainQuest.ShowNearestNonhiddenTask(GameGlobal.Instance.GetQuestIndex()); } } UpdateLayout(); } public void CompleteMainTask(int taskIndex) { mainQuest.SetTaskComplete(taskIndex); } public void CompleteMainTask(string taskId) { mainQuest.SetTaskComplete(taskId); } public void SetSideQuest(DataTools.Quest quest) { sideQuest.SetQuest(quest); if (sideQuest.IsAnyToShow) { EnableSideQuests(true); } } public void SetSideTask(int taskIndex) { sideQuest.SetTaskActive(taskIndex); } public void CompleteSideTask(int taskIndex) { sideQuest.SetTaskComplete(taskIndex); if (!sideQuest.IsAnyToShow) { EnableSideQuests(false); } } public void EnableSideQuests(bool enable=false) { sideQuest.gameObject.SetActive(enable); } public void ShowMainQuest() { mainQuest.Show(); UpdateLayout(); } public void HideMainQuest() { mainQuest.Hide(); HideSideQuest(); } public void ShowSideQuest() { sideQuest.Show(); UpdateLayout(); } public void HideSideQuest() { sideQuest.Hide(); } public void SetSimpleTask(string task, string title="") { if(mainQuest.IsQuestComplete) { mainQuest.RemoveQuest(); mainQuest.SetFakeTask(task, title); } } private void AttachEvents() { GameGlobal.Instance.OnTaskCompleted += CompleteMainTask; GameGlobal.Instance.OnQuestChanged += SetMainQuest; } public void UpdateState() { } private void UpdateLayout() { UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(container); } }