From 48c963425709dcd449fa5bc98049d2393dfd56ef Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期一, 27 八月 2018 15:43:31 +0800
Subject: [PATCH] 2948 移除多个子界面动画

---
 System/WindowBase/Window.cs |   43 +++++++++++++++++++++
 UI/Common/WindowConfig.cs   |   33 +++++++++++++++-
 2 files changed, 73 insertions(+), 3 deletions(-)

diff --git a/System/WindowBase/Window.cs b/System/WindowBase/Window.cs
index 08490aa..e6373a3 100644
--- a/System/WindowBase/Window.cs
+++ b/System/WindowBase/Window.cs
@@ -38,6 +38,7 @@
         }
 
         public bool playAnimation { get; set; }
+        public bool executedActiveWindow { get; set; }
 
         internal Window Open()
         {
@@ -65,6 +66,7 @@
                 Debug.Log(ex.StackTrace);
             }
 
+            executedActiveWindow = false;
             RectTransform parent = null;
             try
             {
@@ -151,6 +153,7 @@
                 windowState = WindowState.Closing;
             }
 
+            executedActiveWindow = false;
             return this;
         }
 
@@ -207,6 +210,7 @@
             try
             {
                 OnAfterClose();
+                executedActiveWindow = false;
             }
             catch (System.Exception ex)
             {
@@ -237,6 +241,11 @@
         public virtual void CloseClick()
         {
             CloseImmediately();
+        }
+
+        public void ChildActive()
+        {
+            OnActived();
         }
 
         protected virtual void LateUpdate()
@@ -350,6 +359,7 @@
                     try
                     {
                         OnAfterClose();
+                        executedActiveWindow = false;
                     }
                     catch (System.Exception ex)
                     {
@@ -400,6 +410,7 @@
                 try
                 {
                     OnAfterClose();
+                    executedActiveWindow = false;
                 }
                 catch (System.Exception ex)
                 {
@@ -439,7 +450,37 @@
 
             try
             {
-                OnActived();
+                var isChildWindow = WindowConfig.Get().IsChildWindow(this.gameObject.name);
+                if (isChildWindow)
+                {
+                    var parentName = string.Empty;
+                    WindowConfig.Get().FindParentWindow(this.gameObject.name, out parentName);
+                    var parentWindow = WindowCenter.Instance.Get(parentName);
+                    if (parentWindow != null && parentWindow.executedActiveWindow)
+                    {
+                        OnActived();
+                        executedActiveWindow = true;
+                    }
+                }
+                else
+                {
+                    OnActived();
+                    executedActiveWindow = true;
+                    var childWindows = WindowConfig.Get().FindChildWindows(this.gameObject.name);
+                    var isParentWindow = childWindows != null;
+                    if (isParentWindow)
+                    {
+                        foreach (var child in childWindows)
+                        {
+                            var window = WindowCenter.Instance.Get(child);
+                            if (window != null && !window.executedActiveWindow)
+                            {
+                                window.ChildActive();
+                            }
+                        }
+                    }
+                }
+
             }
             catch (Exception ex)
             {
diff --git a/UI/Common/WindowConfig.cs b/UI/Common/WindowConfig.cs
index d283396..316b376 100644
--- a/UI/Common/WindowConfig.cs
+++ b/UI/Common/WindowConfig.cs
@@ -7,7 +7,9 @@
 public class WindowConfig : ScriptableObject
 {
 
-    public WindowTable[] windows;
+    public WindowTable[] windows;
+    public Dictionary<string, List<string>> parentChildrenTable = new Dictionary<string, List<string>>();
+    public List<string> childWindows = new List<string>();
 
     static WindowConfig config;
     public static WindowConfig Get()
@@ -15,11 +17,21 @@
         if (config == null)
         {
             config = Resources.Load<WindowConfig>("ScriptableObject/Config/WindowConfig");
+            for (int i = 0; i < config.windows.Length; i++)
+            {
+                var table = config.windows[i];
+                var children = config.parentChildrenTable[table.parent] = new List<string>();
+                for (int j = 0; j < table.orderTables.Length; j++)
+                {
+                    children.Add(table.orderTables[j].window);
+                }
+
+                config.childWindows.AddRange(children);
+            }
         }
 
         return config;
     }
-
 
     public bool FindChildWindow(string _parent, int _order, out string _child)
     {
@@ -63,6 +75,23 @@
         return false;
     }
 
+    public List<string> FindChildWindows(string _parent)
+    {
+        if (parentChildrenTable.ContainsKey(_parent))
+        {
+            return parentChildrenTable[_parent];
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    public bool IsChildWindow(string _name)
+    {
+        return childWindows.Contains(_name);
+    }
+
     [Serializable]
     public struct WindowTable
     {

--
Gitblit v1.8.0