예제 #1
0
 void OnTrackingWindowHidden(WindowController window)
 {
     if (_windows.Contains(window))
     {
         OnHide(window);
     }
 }
예제 #2
0
        void OnHide(WindowController window)
        {
            if (_windows.Count < 1)
            {
                return;
            }
            var currentWindow = CurrentWindow;

            _windows.Pop();

            var prevWindow = CurrentWindow;

            if (prevWindow)
            {
                _canvas.SetupLayers(prevWindow, Background, HasWindowsWithBackground, false);
                OnTopWindowChanged(prevWindow);
                _canvas.MoveToFirstPlane(window);
                if (prevWindow.IsSuspended)
                {
                    prevWindow.WakeUp();
                }
                return;
            }

            if (Background)
            {
                Background.Hide(!window.WithBackground);
            }
        }
예제 #3
0
 void OnShow(WindowController window, bool force)
 {
     _canvas.CheckLayers(window, CurrentWindow);
     _windows.Push(window);
     _canvas.SetupLayers(window, Background, HasWindowsWithBackground, force);
     OnTopWindowChanged(window);
 }
예제 #4
0
        void OpenWindow <T>(WindowController window, object component, Action <T> init) where T : MonoBehaviour
        {
            var type = typeof(T);

            if (!window)
            {
                Debug.LogErrorFormat("WindowManager.OpenWindow({0}): no WindowController.", type.Name);
                return;
            }
            if (component == null)
            {
                Debug.LogErrorFormat("WindowManager.OpenWindow({0}): no component.", type.Name);
                return;
            }
            _canvas.Attach(window);

            var tComponent = component as T;

            if (init != null)
            {
                init(tComponent);
            }
            else
            {
                window.Show();
            }
        }
예제 #5
0
 bool IsClosableByBackButton(WindowController window)
 {
     if (!window)
     {
         return(false);
     }
     return(window.HideByMisclick);
 }
예제 #6
0
 public void MoveToFirstPlane(WindowController window)
 {
     if (!window)
     {
         Debug.LogError("UICanvas.MoveToFirstPlane: window is null.");
         return;
     }
     window.CachedTransform.SetAsLastSibling();
 }
예제 #7
0
 public void RemoveActiveWindow(WindowController controller)
 {
     if (!controller)
     {
         Debug.LogError("WindowManager.RemoveActiveWindow: Controller is null.");
         return;
     }
     _activeWindows.Remove(controller);
 }
예제 #8
0
        public void Attach(WindowController window)
        {
            if (!window)
            {
                Debug.LogError("UICanvas.Attach: window is null.");
                return;
            }
            var trans = window.CachedTransform;

            RectTransformUtils.UpdateLocalPosition(trans, Vector2.zero);
        }
예제 #9
0
        public void CheckLayers(WindowController newWindow, WindowController oldWindow)
        {
            if (!oldWindow)
            {
                return;
            }
            if (!newWindow)
            {
                Debug.LogError("UICanvas.CheckLayers: newWindow is null.");
                return;
            }
            var oldOrderMin = 0;

            if (oldWindow.OverrideCanvas)
            {
                oldOrderMin = oldWindow.OverrideCanvas.sortingOrder;
            }
            var oldOrderMax = oldWindow.MaxOrderInLayer;
            var newOrder    = 0;

            if (newWindow.OverrideCanvas)
            {
                newOrder = newWindow.OverrideCanvas.sortingOrder;
            }
            if (newOrder < oldOrderMin)
            {
                Debug.LogWarningFormat(
                    "UICanvas.CheckLayers: New window order = {0} < current min window order = {1} (new: {2}, old: {3})",
                    newOrder, oldOrderMin, newWindow, oldWindow
                    );
            }
            if (newOrder < oldOrderMax)
            {
                Debug.LogWarningFormat(
                    "UICanvas.CheckLayers: New window order = {0} < current max window order = {1} (new: {2}, old: {3})",
                    newOrder, oldOrderMax, newWindow, oldWindow
                    );
            }
        }
예제 #10
0
 public void SetupLayers(WindowController window, WindowBackground background, bool hasWindowsWithBackground, bool force)
 {
     if (!window)
     {
         Debug.LogError("UICanvas.SetupLayers: window is null");
         return;
     }
     if (background)
     {
         if (window.WithBackground)
         {
             background.Show(force, window.BgColor);
             MoveToFirstPlane(background);
             SetupOrderInLayer(window, background);
         }
         else if (!hasWindowsWithBackground)
         {
             background.Resetup();
         }
     }
     MoveToFirstPlane(window);
 }
예제 #11
0
        void SetupOrderInLayer(WindowController window, WindowBackground background)
        {
            if (!window)
            {
                Debug.LogError("UICanvas.SetupOrderInLayer: window is null.");
                return;
            }
            var windowOrder = 0;

            if (window.OverrideCanvas)
            {
                windowOrder = window.OverrideCanvas.sortingOrder;
            }
            if (!background)
            {
                Debug.LogError("UICanvas.SetupOrderInLayer: background is null.");
                return;
            }
            if (background.OverrideCanvas)
            {
                background.OverrideCanvas.overrideSorting = windowOrder > 0;
                background.OverrideCanvas.sortingOrder    = windowOrder - 1;
            }
        }
예제 #12
0
 void OnTopWindowChanged(WindowController newWindow)
 {
     EventManager.Fire(new Event_WindowTopWindowChange(newWindow));
 }