summaryrefslogtreecommitdiff
path: root/Thronefall_v1.0/Decompile/UIFrameManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Thronefall_v1.0/Decompile/UIFrameManager.cs')
-rw-r--r--Thronefall_v1.0/Decompile/UIFrameManager.cs286
1 files changed, 286 insertions, 0 deletions
diff --git a/Thronefall_v1.0/Decompile/UIFrameManager.cs b/Thronefall_v1.0/Decompile/UIFrameManager.cs
new file mode 100644
index 0000000..80752f8
--- /dev/null
+++ b/Thronefall_v1.0/Decompile/UIFrameManager.cs
@@ -0,0 +1,286 @@
+using System.Collections.Generic;
+using Rewired;
+using UnityEngine;
+using UnityEngine.Events;
+using UnityEngine.SceneManagement;
+
+public class UIFrameManager : MonoBehaviour
+{
+ public static UIFrameManager instance;
+
+ [SerializeField]
+ private string titleFrameSceneName = "_StartMenu";
+
+ [SerializeField]
+ private UIFrame titleFrame;
+
+ [SerializeField]
+ private UIFrame overworldPauseMenuFrame;
+
+ [SerializeField]
+ private UIFrame inMatchPauseMenuFrame;
+
+ [SerializeField]
+ private UIFrame levelSelectFrame;
+
+ [SerializeField]
+ private UIFrame endOfMatchFrame;
+
+ [SerializeField]
+ private UIFrame levelUpRewardFrame;
+
+ [SerializeField]
+ private UIFrame choiceFrame;
+
+ private UIFrame activeFrame;
+
+ private List<UIFrame> frames = new List<UIFrame>();
+
+ private Player input;
+
+ private Stack<UIFrame> frameStack = new Stack<UIFrame>();
+
+ [SerializeField]
+ private RectTransform inGameUIContainer;
+
+ [SerializeField]
+ private RectTransform onScreenMarkerContainer;
+
+ [SerializeField]
+ private TreasureChestUIHelper treasureChest;
+
+ [HideInInspector]
+ public UnityEvent onFrameOpen = new UnityEvent();
+
+ private SceneTransitionManager sceneTransitionManager;
+
+ public UIFrame ActiveFrame => activeFrame;
+
+ public RectTransform InGameUIContainer => inGameUIContainer;
+
+ public RectTransform OnScreenMarkerContainer => onScreenMarkerContainer;
+
+ public TreasureChestUIHelper TreasureChest => treasureChest;
+
+ private void Awake()
+ {
+ if (instance != null)
+ {
+ Object.Destroy(base.gameObject);
+ }
+ else
+ {
+ instance = this;
+ }
+ }
+
+ private void Start()
+ {
+ if (SceneManager.sceneCount <= 1)
+ {
+ SceneManager.LoadScene(titleFrameSceneName, LoadSceneMode.Additive);
+ }
+ foreach (UIFrame frame in frames)
+ {
+ frame.Deactivate();
+ }
+ if (IsSceneLoaded(titleFrameSceneName))
+ {
+ SwitchToTitleFrame();
+ }
+ input = ReInput.players.GetPlayer(0);
+ sceneTransitionManager = SceneTransitionManager.instance;
+ sceneTransitionManager.onSceneChange.AddListener(UpdateUIBasedOnCurrentScene);
+ UpdateUIBasedOnCurrentScene();
+ }
+
+ public void SwitchToTitleFrame()
+ {
+ ChangeActiveFrame(titleFrame);
+ }
+
+ public bool IsSceneLoaded(string sceneName)
+ {
+ for (int i = 0; i < SceneManager.sceneCount; i++)
+ {
+ if (SceneManager.GetSceneAt(i).name == sceneName)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void Update()
+ {
+ if (input.GetButtonDown("Pause Menu"))
+ {
+ OpenMenu();
+ }
+ else if (input.GetButtonDown("Cancel"))
+ {
+ Cancel();
+ }
+ }
+
+ private void Cancel()
+ {
+ if (activeFrame != null && activeFrame != titleFrame && !activeFrame.canNotBeEscaped)
+ {
+ CloseActiveFrame();
+ }
+ }
+
+ private void OpenMenu()
+ {
+ if (activeFrame != null && !activeFrame.canNotBeEscaped)
+ {
+ CloseActiveFrame();
+ }
+ else if (activeFrame == null && SceneManager.GetSceneByName(SceneTransitionManager.instance.levelSelectScene).IsValid())
+ {
+ ChangeActiveFrame(overworldPauseMenuFrame);
+ }
+ else if (activeFrame == null)
+ {
+ ChangeActiveFrame(inMatchPauseMenuFrame);
+ }
+ }
+
+ public void RegisterFrame(UIFrame frame)
+ {
+ frames.Add(frame);
+ }
+
+ public void ChangeActiveFrame(UIFrame nextFrame)
+ {
+ ProcessFrameChange(nextFrame, writeOldFrameToStack: true);
+ }
+
+ public void ChangeActiveFrameKeepOldVisible(UIFrame nextFrame)
+ {
+ ProcessFrameChange(nextFrame, writeOldFrameToStack: true, keepOldFrameGameObjectActive: true);
+ }
+
+ private void ProcessFrameChange(UIFrame nextFrame, bool writeOldFrameToStack, bool keepOldFrameGameObjectActive = false)
+ {
+ if (nextFrame != null)
+ {
+ if (LocalGamestate.Instance != null)
+ {
+ LocalGamestate.Instance.SetPlayerFreezeState(nextFrame.freezePlayer);
+ }
+ if (nextFrame.freezeTime)
+ {
+ Time.timeScale = 0f;
+ }
+ else
+ {
+ Time.timeScale = 1f;
+ }
+ if (activeFrame != null && writeOldFrameToStack)
+ {
+ frameStack.Push(activeFrame);
+ }
+ onFrameOpen.Invoke();
+ }
+ else
+ {
+ if (LocalGamestate.Instance != null)
+ {
+ LocalGamestate.Instance.SetPlayerFreezeState(frozen: false);
+ }
+ Time.timeScale = 1f;
+ frameStack.Clear();
+ }
+ if (activeFrame != null)
+ {
+ if (activeFrame == choiceFrame && ChoiceManager.instance.ChoiceCoroutineWaiting)
+ {
+ ChoiceManager.instance.CancelChoice();
+ }
+ activeFrame.Deactivate(keepOldFrameGameObjectActive);
+ }
+ if (nextFrame != null)
+ {
+ nextFrame.Activate();
+ }
+ activeFrame = nextFrame;
+ }
+
+ public void CloseActiveFrame()
+ {
+ if (activeFrame != null)
+ {
+ if (frameStack.Count > 0)
+ {
+ ProcessFrameChange(frameStack.Pop(), writeOldFrameToStack: false);
+ }
+ else
+ {
+ ChangeActiveFrame(null);
+ }
+ }
+ }
+
+ public void CloseAllFrames()
+ {
+ if (activeFrame != null)
+ {
+ frameStack.Clear();
+ ChangeActiveFrame(null);
+ }
+ }
+
+ public void ResetToTileScreen()
+ {
+ ProcessFrameChange(titleFrame, writeOldFrameToStack: false);
+ frameStack.Clear();
+ }
+
+ public void QuitToDesktop()
+ {
+ Application.Quit();
+ }
+
+ public static bool TryOpenLevelSelect()
+ {
+ if (instance.activeFrame != null)
+ {
+ return false;
+ }
+ instance.ChangeActiveFrame(instance.levelSelectFrame);
+ return true;
+ }
+
+ public static void TriggerEndOfMatch()
+ {
+ instance.ProcessFrameChange(instance.endOfMatchFrame, writeOldFrameToStack: false);
+ }
+
+ public static void ShowLevelUpReward()
+ {
+ instance.ProcessFrameChange(instance.levelUpRewardFrame, writeOldFrameToStack: true, keepOldFrameGameObjectActive: true);
+ }
+
+ private void UpdateUIBasedOnCurrentScene()
+ {
+ switch (sceneTransitionManager.CurrentSceneState)
+ {
+ case SceneTransitionManager.SceneState.InGame:
+ treasureChest.gameObject.SetActive(value: true);
+ break;
+ case SceneTransitionManager.SceneState.LevelSelect:
+ treasureChest.gameObject.SetActive(value: false);
+ break;
+ case SceneTransitionManager.SceneState.MainMenu:
+ treasureChest.gameObject.SetActive(value: false);
+ break;
+ }
+ }
+
+ public void PresentChoiceFrame()
+ {
+ ProcessFrameChange(choiceFrame, writeOldFrameToStack: false);
+ }
+}