using Cryville.Common.Unity.UI; using Cryville.Crtr.Browsing; using System.Collections.Generic; using TMPro; using UnityEngine; namespace Cryville.Crtr { public class Menu : MonoBehaviour { #pragma warning disable IDE0044 [SerializeField] ResourceBrowserMaster m_browserMaster; [SerializeField] Animator m_targetAnimator; [SerializeField] ProgressBar m_progressBar; [SerializeField] SettingsPanel m_settingsPanel; [SerializeField] TMP_Text m_title; [SerializeField] GameObject[] m_backBlockingObjects; #pragma warning restore IDE0044 int frameIndex = 2; bool initialized = false; int totalTasks = 0; #pragma warning disable IDE0051 void Awake() { Game.Init(); transform.parent.Find("Canvas/Contents").gameObject.SetActive(true); m_settingsPanel.Target = Settings.Default; PushTitle("Chart Browser"); } void Update() { if (!initialized) { int taskCount = Game.NetworkTaskWorker.TaskCount; if (totalTasks < taskCount) totalTasks = taskCount; if (frameIndex > 0) { frameIndex--; return; } m_progressBar.value = totalTasks == 0 ? 1 : (1 - (float)taskCount / totalTasks); if (taskCount == 0) { initialized = true; m_targetAnimator.SetTrigger("T_Main"); } } if (Input.GetKeyDown(KeyCode.Escape)) { if (m_targetAnimator != null) Back(); } } private static string animatorState = null; void OnDisable() { animatorState = m_targetAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.name; } void OnEnable() { Application.targetFrameRate = 60; if (animatorState != null) m_targetAnimator.PlayInFixedTime(animatorState, 0, 0); Game.NetworkTaskWorker.ResumeBackgroundTasks(); } #pragma warning restore IDE0051 readonly Stack _uiStack = new Stack(); public void PushTitle(string title) { _uiStack.Push(title); m_title.SetText(title); } public void Back() { foreach (var obj in m_backBlockingObjects) { if (obj.activeInHierarchy) return; } if (m_browserMaster.Back()) return; m_targetAnimator.SetTrigger("G_Back"); if (_uiStack.Count <= 1) return; _uiStack.Pop(); m_title.SetText(_uiStack.Peek()); } public void Quit() { Application.Quit(); } } }