少年修仙传客户端代码仓库
client_Wu Xijin
2019-02-03 357e5400166e34a513c33177432b619d80c95363
3335 重构窗口管理
1个文件已修改
75 ■■■■ 已修改文件
System/WindowBase/Windows.cs 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/Windows.cs
@@ -56,8 +56,7 @@
            }
        }
        Dictionary<string, Window> windows = new Dictionary<string, Window>();
        Windows windows = new Windows();
        List<OpenCommand> openCommands = new List<OpenCommand>();
        List<CloseCommand> closeCommands = new List<CloseCommand>();
@@ -227,8 +226,10 @@
        public void CloseAll(CloseAllIgnoreType ignoreType = CloseAllIgnoreType.System)
        {
            foreach (var window in windows.Values)
            for (var i = windows.Keys.Count - 1; i >= 0; i--)
            {
                var name = windows.Keys[i];
                var window = windows[name];
                if (window == null)
                {
                    continue;
@@ -241,16 +242,16 @@
                        isIgnore = window.windowInfo.windowType <= WindowType.Base;
                        break;
                    case CloseAllIgnoreType.BaseAndCustom:
                        isIgnore = window.windowInfo.windowType <= WindowType.Base || closeAllIgnoreWindows.Contains(window.name);
                        isIgnore = window.windowInfo.windowType <= WindowType.Base || closeAllIgnoreWindows.Contains(name);
                        break;
                    case CloseAllIgnoreType.System:
                        isIgnore = window.windowInfo.windowType >= WindowType.System;
                        break;
                    case CloseAllIgnoreType.Custom:
                        isIgnore = closeAllIgnoreWindows.Contains(window.name);
                        isIgnore = closeAllIgnoreWindows.Contains(name);
                        break;
                    case CloseAllIgnoreType.SystemAndCustom:
                        isIgnore = window.windowInfo.windowType >= WindowType.System || closeAllIgnoreWindows.Contains(window.name);
                        isIgnore = window.windowInfo.windowType >= WindowType.System || closeAllIgnoreWindows.Contains(name);
                        break;
                }
@@ -258,7 +259,7 @@
                {
                    if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
                    {
                        window.CloseImmediately();
                        Close(name);
                    }
                }
            }
@@ -268,10 +269,11 @@
        public void CloseOthers<T>() where T : Window
        {
            foreach (var name in windows.Keys)
            for (var i = windows.Keys.Count - 1; i >= 0; i--)
            {
                var name = windows.Keys[i];
                var window = windows[name];
                if (window is T)
                if (window == null || window is T)
                {
                    continue;
                }
@@ -290,8 +292,9 @@
        public void CloseOthers(List<string> windowNames, CloseAllIgnoreType ignoreType)
        {
            foreach (var name in windows.Keys)
            for (var i = windows.Keys.Count - 1; i >= 0; i--)
            {
                var name = windows.Keys[i];
                var window = windows[name];
                if (window == null)
                {
@@ -330,9 +333,9 @@
            asyncLoad.StopAllTasks();
        }
        public void DestoryWinsByStage(WindowStage _windowStage)
        public void DestoryWinsByStage(WindowStage windowStage)
        {
            switch (_windowStage)
            switch (windowStage)
            {
                case WindowStage.Launch:
                    DestroyWin<DownLoadWin>();
@@ -352,7 +355,7 @@
                    break;
            }
            UnLoadAssetBundle(_windowStage);
            UnLoadAssetBundle(windowStage);
        }
        public void DestroyWin<T>() where T : Window
@@ -431,8 +434,9 @@
        public bool ExistAnyFullScreenOrMaskWin()
        {
            var exist = false;
            foreach (var window in windows.Values)
            foreach (var name in windows.Keys)
            {
                var window = windows[name];
                if (window.windowInfo.needMask || window.windowInfo.fullScreen)
                {
                    if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
@@ -454,8 +458,9 @@
        public bool ExistAnyFullScreenOrMaskWinLEqual(WindowType windowType)
        {
            var exist = false;
            foreach (var window in windows.Values)
            foreach (var name in windows.Keys)
            {
                var window = windows[name];
                if ((window.windowInfo.needMask || window.windowInfo.fullScreen) && window.windowInfo.windowType >= windowType)
                {
                    if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
@@ -603,7 +608,7 @@
                {
                    var exceptOpen = StageLoad.Instance.stageType == Stage.E_StageType.Dungeon
                        && !ExistAnyFullScreenOrMaskWinLEqual(WindowType.Base)
                        && !IsOpen("DefaultDialogueBoxWin")
                        && !IsOpen("DefaultDialogueBoxWin")
                        && !IsOpen("DialogueDuidanceWin")
                        && !IsOpen("TaskBoxBGMWin");
@@ -738,6 +743,44 @@
            SystemAndCustom = 5,
        }
        class Windows
        {
            Dictionary<string, Window> windows = new Dictionary<string, Window>();
            List<string> windowKeys = new List<string>();
            public Window this[string key]
            {
                get { return windows[key]; }
                set
                {
                    windows[key] = value;
                    if (!windowKeys.Contains(key))
                    {
                        windowKeys.Add(key);
                    }
                }
            }
            public List<string> Keys { get { return windowKeys; } }
            public bool ContainsKey(string key)
            {
                return windowKeys.Contains(key);
            }
            public bool TryGetValue(string key, out Window window)
            {
                return windows.TryGetValue(key, out window);
            }
            public void Remove(string key)
            {
                windows.Remove(key);
                windowKeys.Remove(key);
            }
        }
    }
}