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> parentChildrenTable = new Dictionary>(); [NonSerialized] public List childWindows = new List(); static WindowConfig config; static WindowConfig Get() { if (config == null) { config = BuiltInLoader.LoadScriptableObject("WindowConfig"); foreach (var table in config.windows) { var children = config.parentChildrenTable[table.parent] = new List(); 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 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 GetWindowFunctionInfos(string parent) { foreach (var table in Get().windows) { if (table.parent == parent) { return new List(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, } }