2 using System.Collections.Generic;
9 [RequireComponent(typeof(Canvas))]
10 [DisallowMultipleComponent]
18 Canvas rootCanvas = null;
19 Transform rootCanvasTransform = null;
21 Dictionary<int, GameObject> istanciatedScreens =
new Dictionary<int, GameObject>();
23 List<UIScreen> screens =
new List<UIScreen>();
24 List<GameObject> screenGOs =
new List<GameObject>();
34 rootCanvas = GetComponent<Canvas>();
35 rootCanvasTransform = transform;
41 if(StartScreen != null)
57 Debug.LogError(
"(UIScreenManager)" + name +
" you are trying to open a screen that is null!");
63 Debug.LogError(
"(UIScreenManager)" + name +
" you are trying to open a (UIScreen)" + screen.name +
" but the screen has no prefab attached to it!");
67 GameObject screenGO = istanciatedScreens.ContainsKey(screen.
GetScreenId) ? istanciatedScreens[screen.
GetScreenId] : null;
71 screenGO = GameObject.Instantiate<GameObject>(screen.
GetScreenPrefab, rootCanvasTransform);
72 istanciatedScreens.Add(screen.
GetScreenId, screenGO);
75 screenGO.SetActive(
true);
81 for(
int i = screens.Count - 1; i >= 0; i--)
83 screenGOs[i].SetActive(
false);
85 if(screens[i].GetDisableScreensUnderneath)
90 Canvas topCanvas = screenGO.GetComponent<Canvas>();
91 Canvas previousCanvas = screenGOs[screenGOs.Count - 1].GetComponent<Canvas>();
92 topCanvas.sortingOrder = previousCanvas.sortingOrder + 1;
96 Canvas topCanvas = screenGO.GetComponent<Canvas>();
97 topCanvas.sortingOrder = rootCanvas.sortingOrder + 1;
101 screenGOs.Add(screenGO);
108 Debug.LogError(
"(UIScreenManager)" + name +
" you are trying to close a screen that is null!");
112 if(screens.Count == 0)
114 Debug.LogError(
"(UIScreenManager)" + name +
" you are trying to open a (UIScreen)" + screen.name +
" but the screens stack is empty!");
118 if(screens[screens.Count - 1] != screen)
120 Debug.LogError(
"(UIScreenManager)" + name +
" you are trying to open a (UIScreen)" + screen.name +
" but it is not on top of screens stack!");
129 int lastIndex = screens.Count - 1;
130 UIScreen screen = screens[lastIndex];
131 screens.RemoveAt(lastIndex);
133 GameObject screenGO = screenGOs[lastIndex];
134 screenGOs.RemoveAt(lastIndex);
139 screenGO.SetActive(
false);
141 for (
int i = screens.Count - 1; i >= 0; i--)
143 screenGOs[i].SetActive(
true);
145 if(screens[i].GetDisableScreensUnderneath)
void OpenScreen(UIScreen screen)
The UIScreenManager is a simple window manager.
void CloseScreen(UIScreen screen)
This ScriptableObject holds all the information that is required by the UIScreenManager to display a ...
GameObject GetScreenPrefab
bool GetDisableScreensUnderneath
bool GetDestroyWhenClosed