diff options
Diffstat (limited to 'Thronefall_v1.0/Decompile/UIFrameManager.cs')
-rw-r--r-- | Thronefall_v1.0/Decompile/UIFrameManager.cs | 286 |
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); + } +} |