| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using System; | 
|   | 
| [CreateAssetMenu(menuName = "Config/WindowConfig")] | 
| public class WindowConfig : ScriptableObject | 
| { | 
|     public WindowTable[] windows; | 
|   | 
|     [NonSerialized] public Dictionary<string, List<string>> parentChildrenTable = new Dictionary<string, List<string>>(); | 
|     [NonSerialized] public List<string> childWindows = new List<string>(); | 
|   | 
|     static WindowConfig config; | 
|     static WindowConfig Get() | 
|     { | 
|         if (config == null) | 
|         { | 
|             config = BuiltInLoader.LoadScriptableObject<WindowConfig>("WindowConfig"); | 
|             foreach (var table in config.windows) | 
|             { | 
|                 var children = config.parentChildrenTable[table.parent] = new List<string>(); | 
|                 foreach (var info in table.orderTables) | 
|                 { | 
|                     children.Add(info.window); | 
|                 } | 
|   | 
|                 config.childWindows.AddRange(children); | 
|             } | 
|         } | 
|   | 
|         return config; | 
|     } | 
|   | 
|     public static void Release() | 
|     { | 
|         config = null; | 
|     } | 
|   | 
|     public static bool FindParentWindow(string child, out string parent) | 
|     { | 
|         foreach (var table in Get().windows) | 
|         { | 
|             foreach (var orderTable in table.orderTables) | 
|             { | 
|                 if (orderTable.window == child) | 
|                 { | 
|                     parent = table.parent; | 
|                     return true; | 
|                 } | 
|             } | 
|         } | 
|   | 
|         parent = string.Empty; | 
|         return false; | 
|     } | 
|   | 
|     public static List<string> GetChildWindows(string parent) | 
|     { | 
|         if (Get().parentChildrenTable.ContainsKey(parent)) | 
|         { | 
|             return Get().parentChildrenTable[parent]; | 
|         } | 
|         else | 
|         { | 
|             return null; | 
|         } | 
|     } | 
|   | 
|     public static bool IsParentWindow(string name) | 
|     { | 
|         foreach (var window in Get().windows) | 
|         { | 
|             if (window.parent == name) | 
|             { | 
|                 return true; | 
|             } | 
|         } | 
|   | 
|         return false; | 
|     } | 
|   | 
|     public static bool IsChildWindow(string name) | 
|     { | 
|         return Get().childWindows.Contains(name); | 
|     } | 
|   | 
|     public static WindowLevel GetWindowLevel(string name) | 
|     { | 
|         foreach (var window in Get().windows) | 
|         { | 
|             if (window.parent == name) | 
|             { | 
|                 return window.level; | 
|             } | 
|         } | 
|   | 
|         return WindowLevel.None; | 
|     } | 
|   | 
|     public static string GetWindowPattern(string name) | 
|     { | 
|         foreach (var window in Get().windows) | 
|         { | 
|             if (window.parent == name) | 
|             { | 
|                 return window.pattern; | 
|             } | 
|         } | 
|   | 
|         return string.Empty; | 
|     } | 
|   | 
|     public static List<OrderTable> GetWindowFunctionInfos(string parent) | 
|     { | 
|         foreach (var table in Get().windows) | 
|         { | 
|             if (table.parent == parent) | 
|             { | 
|                 return new List<OrderTable>(table.orderTables); | 
|             } | 
|         } | 
|   | 
|         return null; | 
|     } | 
|   | 
|     public static string GetTitleIconKey(string name) | 
|     { | 
|         foreach (var window in Get().windows) | 
|         { | 
|             if (window.parent == name) | 
|             { | 
|                 return window.titleIconKey; | 
|             } | 
|         } | 
|   | 
|         return string.Empty; | 
|     } | 
|   | 
|     [Serializable] | 
|     public struct WindowTable | 
|     { | 
|         public string parent; | 
|         public string titleIconKey; | 
|         public WindowLevel level; | 
|         public string pattern; | 
|         public OrderTable[] orderTables; | 
|     } | 
|   | 
|     [Serializable] | 
|     public struct OrderTable | 
|     { | 
|         public int order; | 
|         public int functionId; | 
|         public int redPointId; | 
|         public string titleKey; | 
|         public string window; | 
|     } | 
|   | 
|     public enum WindowLevel | 
|     { | 
|         None, | 
|         OneLevel, | 
|         SecondLevel, | 
|         ThirdLevel, | 
|     } | 
|   | 
| } |