// using System.Collections.Generic;
|
// using UnityEngine;
|
// using System;
|
//
|
// namespace Snxxz.UI
|
// {
|
// [XLua.LuaCallCSharp]
|
// public class WindowCenter : Singleton<WindowCenter>
|
// {
|
// public event Action<Window> windowBeforeOpenEvent;
|
// public event Action<Window> windowAfterOpenEvent;
|
// public event Action<Window> windowBeforeCloseEvent;
|
// public event Action<Window> windowAfterCloseEvent;
|
// public event Action<Window> jumpWindowCloseEvent;
|
// List<string> closeAllIgnoreWindows = new List<string>() {
|
// "MessageWin", "NewBieWin", "NewItemGetWin", "AttributePromoteShowWin" ,"DungeonBeginCoolDownWin","DungeonFightWin","StatusTipWin"
|
// ,"ScrollTipWin","MarqueeWin","ExperienceOpenWin","TrumpetWin","BattlePrepareCoolDownWin","DungeonGradeWin","BattleHintWin",
|
// "TreasureDungeonMissionHintWin","FairyGrabBossHintWin","DungeonFairyFeastHintWin","PetAndMountPushWin","UpgradeWin","DungeonFairyLandWin"
|
// ,"GatherSoulDungeonHintWin"
|
// };
|
//
|
// UIRoot m_UIRoot;
|
// public UIRoot uiRoot {
|
// get {
|
// if (m_UIRoot == null)
|
// {
|
// var prefab = BuiltInLoader.LoadPrefab("UIRoot");
|
// var instance = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity);
|
// instance.name = "UIRoot";
|
// m_UIRoot = instance.GetComponent<UIRoot>();
|
// if (Application.isPlaying)
|
// {
|
// GameObject.DontDestroyOnLoad(instance);
|
// }
|
// }
|
// return m_UIRoot;
|
// }
|
// }
|
//
|
// WindowAsyncLoad m_AnyncLoad;
|
// public WindowAsyncLoad asyncLoad {
|
// get {
|
// if (m_AnyncLoad == null)
|
// {
|
// var gameObject = new GameObject("WindowAnyncLoad");
|
// m_AnyncLoad = gameObject.AddMissingComponent<WindowAsyncLoad>();
|
// GameObject.DontDestroyOnLoad(gameObject);
|
// }
|
//
|
// return m_AnyncLoad;
|
// }
|
// }
|
//
|
// int m_PreCreateWindowNum = 0;
|
// public bool isPreCreating {
|
// get {
|
// return m_PreCreateWindowNum > 0;
|
// }
|
// }
|
//
|
// Dictionary<string, Window> windows = new Dictionary<string, Window>();
|
//
|
// public void OpenFromLocal<T>() where T : Window
|
// {
|
// var windowName = typeof(T).Name;
|
// OpenFromLocal(windowName);
|
// }
|
//
|
// public void OpenFromLocal(string _name)
|
// {
|
// Window win = null;
|
// if (TryGetWindow(_name, out win))
|
// {
|
// if (win.windowState == Window.WindowState.Closed)
|
// {
|
// win.functionOrder = 0;
|
// win.playAnimation = true;
|
// win.Open();
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("{0} 窗口已经打开!", _name);
|
// }
|
// }
|
// else
|
// {
|
// win = GetWindowInstance(_name, true);
|
// if (win != null)
|
// {
|
// win.functionOrder = 0;
|
// win.playAnimation = true;
|
// win.Open();
|
// }
|
// }
|
// }
|
//
|
// public T Open<T>(bool _forceSync = false, int _functionalOrder = 0) where T : Window
|
// {
|
// var name = typeof(T).Name;
|
// var window = Open(name, _forceSync, _functionalOrder);
|
// if (window != null)
|
// {
|
// return window as T;
|
// }
|
// else
|
// {
|
// return null;
|
// }
|
// }
|
//
|
// public Window Open(string _name, bool _forceSync = false, int _functionalOrder = 0)
|
// {
|
// if (VersionConfig.Get().isBanShu)
|
// {
|
// if (_name == "VipRechargeWin")
|
// {
|
// SysNotifyMgr.Instance.ShowTip("FuncNoOpen_VIP");
|
// return null;
|
// }
|
// }
|
//
|
// var childWindow = string.Empty;
|
// if (_forceSync || AssetSource.uiFromEditor)
|
// {
|
// return OpenSingleWindow(_name, _forceSync, _functionalOrder);
|
// }
|
// else
|
// {
|
// if (WindowConfig.Get().FindChildWindow(_name, _functionalOrder, out childWindow))
|
// {
|
// WindowTrim(childWindow);
|
// if (!windows.ContainsKey(childWindow))
|
// {
|
// GetWindowInstanceAsync(childWindow, (bool _ok, UnityEngine.Object _object) =>
|
// {
|
// if (_ok)
|
// {
|
// OpenSingleWindow(_name, _forceSync, _functionalOrder);
|
// }
|
// });
|
//
|
// return null;
|
// }
|
// else
|
// {
|
// return OpenSingleWindow(_name, _forceSync, _functionalOrder);
|
// }
|
// }
|
// else
|
// {
|
// return OpenSingleWindow(_name, _forceSync, _functionalOrder);
|
// }
|
// }
|
// }
|
//
|
// public T OpenWithoutAnimation<T>() where T : Window
|
// {
|
// var name = typeof(T).Name;
|
// var window = OpenWithoutAnimation(name);
|
// if (window != null)
|
// {
|
// return window as T;
|
// }
|
// else
|
// {
|
// return null;
|
// }
|
// }
|
//
|
// public Window OpenWithoutAnimation(string _name)
|
// {
|
// Window win = null;
|
// if (TryGetWindow(_name, out win))
|
// {
|
// if (win.windowState == Window.WindowState.Closed)
|
// {
|
// win.functionOrder = 0;
|
// win.playAnimation = false;
|
// win.Open();
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("{0} 窗口已经打开!", _name);
|
// }
|
//
|
// return win;
|
// }
|
//
|
// win = GetWindowInstance(_name, false);
|
// if (win != null)
|
// {
|
// win.functionOrder = 0;
|
// win.playAnimation = false;
|
// win.Open();
|
// }
|
//
|
// return win;
|
// }
|
//
|
// public T Get<T>() where T : Window
|
// {
|
// T win = null;
|
// if (TryGetWindow(out win))
|
// {
|
// return win;
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("没有找到窗口:{0}", typeof(T).Name);
|
// return null;
|
// }
|
//
|
// }
|
//
|
// public Window Get(string _window)
|
// {
|
// if (windows.ContainsKey(_window))
|
// {
|
// return windows[_window];
|
// }
|
// else
|
// {
|
// return null;
|
// }
|
// }
|
//
|
// public T Close<T>() where T : Window
|
// {
|
// T win = null;
|
// if (TryGetWindow<T>(out win))
|
// {
|
// if (win.windowState != Window.WindowState.Closed)
|
// {
|
// win.CloseImmediately();
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("{0} 窗口已经关闭!", typeof(T));
|
// }
|
// }
|
// else
|
// {
|
// asyncLoad.StopTask(typeof(T).Name);
|
// DebugEx.LogFormat("{0} 窗口无法获得!", typeof(T));
|
// }
|
//
|
// return win;
|
// }
|
//
|
// public Window Close(string _name)
|
// {
|
// if (windows.ContainsKey(_name))
|
// {
|
// var window = windows[_name];
|
// if (window.windowState != Window.WindowState.Closed)
|
// {
|
// window.CloseImmediately();
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("{0} 窗口已经关闭!", _name);
|
// }
|
//
|
// return window;
|
// }
|
// else
|
// {
|
// asyncLoad.StopTask(_name);
|
// DebugEx.LogFormat("{0} 窗口无法获得!", _name);
|
// return null;
|
// }
|
//
|
// }
|
//
|
// public T CloseImmediately<T>() where T : Window
|
// {
|
// T win = null;
|
// if (TryGetWindow<T>(out win))
|
// {
|
// if (win.windowState != Window.WindowState.Closed)
|
// {
|
// win.CloseImmediately();
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("{0} 窗口已经关闭!", typeof(T));
|
// }
|
// }
|
// else
|
// {
|
// asyncLoad.StopTask(typeof(T).Name);
|
// DebugEx.LogFormat("{0} 窗口无法获得!", typeof(T));
|
// }
|
//
|
// return win;
|
// }
|
//
|
// public List<string> GetAll()
|
// {
|
// return new List<string>(windows.Keys);
|
// }
|
//
|
// public void CloseAll(CloseAllIgnoreType _ignoreType = CloseAllIgnoreType.System)
|
// {
|
// foreach (var window in windows.Values)
|
// {
|
// if (window == null)
|
// {
|
// continue;
|
// }
|
//
|
// var isIgnore = false;
|
// switch (_ignoreType)
|
// {
|
// case CloseAllIgnoreType.Base:
|
// isIgnore = window.windowInfo.windowType <= WindowType.Base;
|
// break;
|
// case CloseAllIgnoreType.BaseAndCustom:
|
// isIgnore = window.windowInfo.windowType <= WindowType.Base || closeAllIgnoreWindows.Contains(window.name);
|
// break;
|
// case CloseAllIgnoreType.System:
|
// isIgnore = window.windowInfo.windowType >= WindowType.System;
|
// break;
|
// case CloseAllIgnoreType.Custom:
|
// isIgnore = closeAllIgnoreWindows.Contains(window.name);
|
// break;
|
// case CloseAllIgnoreType.SystemAndCustom:
|
// isIgnore = window.windowInfo.windowType >= WindowType.System || closeAllIgnoreWindows.Contains(window.name);
|
// break;
|
// }
|
//
|
// if (!isIgnore)
|
// {
|
// if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
|
// {
|
// window.CloseImmediately();
|
// }
|
// }
|
// }
|
//
|
// asyncLoad.StopAllTasks();
|
// }
|
//
|
// public void CloseOthers<T>() where T : Window
|
// {
|
// foreach (var window in windows.Values)
|
// {
|
// if (window is T)
|
// {
|
// continue;
|
// }
|
//
|
// if (window != null)
|
// {
|
// if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
|
// {
|
// window.CloseImmediately();
|
// }
|
// }
|
// }
|
//
|
// asyncLoad.StopAllTasks();
|
// }
|
//
|
// public void CloseOthers(List<string> _windowNames, CloseAllIgnoreType _ignoreType)
|
// {
|
// foreach (var window in windows.Values)
|
// {
|
// if (window == null)
|
// {
|
// continue;
|
// }
|
//
|
// var isIgnore = false;
|
// switch (_ignoreType)
|
// {
|
// case CloseAllIgnoreType.Base:
|
// isIgnore = _windowNames.Contains(window.name) || window.windowInfo.windowType <= WindowType.Base;
|
// break;
|
// case CloseAllIgnoreType.BaseAndCustom:
|
// isIgnore = _windowNames.Contains(window.name) || window.windowInfo.windowType <= WindowType.Base || closeAllIgnoreWindows.Contains(window.name);
|
// break;
|
// case CloseAllIgnoreType.System:
|
// isIgnore = _windowNames.Contains(window.name) || window.windowInfo.windowType >= WindowType.System;
|
// break;
|
// case CloseAllIgnoreType.Custom:
|
// isIgnore = _windowNames.Contains(window.name) || closeAllIgnoreWindows.Contains(window.name);
|
// break;
|
// case CloseAllIgnoreType.SystemAndCustom:
|
// isIgnore = _windowNames.Contains(window.name) || window.windowInfo.windowType >= WindowType.System || closeAllIgnoreWindows.Contains(window.name);
|
// break;
|
// }
|
//
|
// if (!isIgnore)
|
// {
|
// if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
|
// {
|
// window.CloseImmediately();
|
// }
|
// }
|
// }
|
//
|
// asyncLoad.StopAllTasks();
|
// }
|
//
|
// public void DestoryWinsByStage(WindowStage _windowStage)
|
// {
|
// switch (_windowStage)
|
// {
|
// case WindowStage.Launch:
|
// DestroyWin<DownLoadWin>();
|
// DestroyWin<VersionUpdateWin>();
|
// DestroyWin<LaunchWin>();
|
// break;
|
// case WindowStage.Login:
|
// DestroyWin<LoginWin>();
|
// DestroyWin<ServerListWin>();
|
// break;
|
// case WindowStage.SelectRole:
|
// DestroyWin<CreateRoleWin>();
|
// DestroyWin<SelectRoleWin>();
|
// DestroyWin<LaunchBackGroundWin>();
|
// break;
|
// default:
|
// break;
|
// }
|
//
|
// UnLoadAssetBundle(_windowStage);
|
// }
|
//
|
// public void DestroyWin<T>() where T : Window
|
// {
|
// DestroyWin(typeof(T).Name);
|
// }
|
//
|
// public void DestroyWin(string _name)
|
// {
|
// if (windows.ContainsKey(_name))
|
// {
|
// var win = windows[_name];
|
// win.CloseImmediately();
|
// GameObject.Destroy(win.gameObject);
|
// MonoBehaviour.Destroy(win);
|
// windows[_name] = null;
|
// windows.Remove(_name);
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("{0} 窗口无法获得!", _name);
|
// }
|
// }
|
//
|
// public void UnLoadAssetBundle(WindowStage _windowStage)
|
// {
|
// if (!AssetSource.uiFromEditor)
|
// {
|
// switch (_windowStage)
|
// {
|
// case WindowStage.Launch:
|
// break;
|
// case WindowStage.Login:
|
// AssetBundleUtility.Instance.UnloadAsset("ui/prioritywindow", "LoginWin");
|
// AssetBundleUtility.Instance.UnloadAsset("ui/prioritywindow", "ServerListWin");
|
// break;
|
// case WindowStage.SelectRole:
|
// AssetBundleUtility.Instance.UnloadAsset("ui/prioritywindow", "CreateRoleWin");
|
// AssetBundleUtility.Instance.UnloadAsset("ui/prioritywindow", "SelectRoleWin");
|
// break;
|
// default:
|
// break;
|
// }
|
// }
|
// }
|
//
|
// public bool IsOpen<T>() where T : Window
|
// {
|
// T win = null;
|
// if (TryGetWindow(out win))
|
// {
|
// var open = win.windowState == Window.WindowState.Opened
|
// || win.windowState == Window.WindowState.Opening;
|
//
|
// return open;
|
// }
|
// else
|
// {
|
// return false;
|
// }
|
// }
|
//
|
// public bool IsOpen(string _name)
|
// {
|
// if (windows.ContainsKey(_name) && windows[_name] != null)
|
// {
|
// var window = windows[_name];
|
// return window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening;
|
// }
|
// else
|
// {
|
// return false;
|
// }
|
// }
|
//
|
// public bool ExitAnyFullScreenOrMaskWin()
|
// {
|
// bool exit = false;
|
// foreach (var window in windows.Values)
|
// {
|
// if (window.windowInfo.needMask || window.windowInfo.fullScreen)
|
// {
|
// if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
|
// {
|
// exit = true;
|
// break;
|
// }
|
// }
|
// }
|
//
|
// return exit;
|
// }
|
//
|
// /// <summary>
|
// /// 是否存在大于或等于这个层级的全屏或有模糊背景的界面
|
// /// </summary>
|
// /// <param name="_windowType"></param>
|
// /// <returns></returns>
|
// public bool ExitAnyFullScreenOrMaskWinLEqual(WindowType _windowType)
|
// {
|
// bool exit = false;
|
// foreach (var window in windows.Values)
|
// {
|
// if ((window.windowInfo.needMask || window.windowInfo.fullScreen) && window.windowInfo.windowType >= _windowType)
|
// {
|
// if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
|
// {
|
// exit = true;
|
// break;
|
// }
|
// }
|
// }
|
//
|
// return exit;
|
// }
|
//
|
// internal void NotifyBeforeOpen<T>(T _window) where T : Window
|
// {
|
// if (windowBeforeOpenEvent != null)
|
// {
|
// windowBeforeOpenEvent(_window);
|
// }
|
// }
|
//
|
// internal void NotifyAfterOpen<T>(T _window) where T : Window
|
// {
|
// if (windowAfterOpenEvent != null)
|
// {
|
// windowAfterOpenEvent(_window);
|
// }
|
// }
|
//
|
// internal void NotifyBeforeClose<T>(T _window) where T : Window
|
// {
|
// if (windowBeforeCloseEvent != null)
|
// {
|
// windowBeforeCloseEvent(_window);
|
// }
|
// }
|
//
|
// internal void NotifyAfterClose<T>(T _window) where T : Window
|
// {
|
// if (windowAfterCloseEvent != null)
|
// {
|
// windowAfterCloseEvent(_window);
|
// }
|
// }
|
//
|
// internal void JumpNotifyAfterClose<T>(T _window) where T : Window
|
// {
|
// if (jumpWindowCloseEvent != null)
|
// {
|
// jumpWindowCloseEvent(_window);
|
// }
|
// }
|
//
|
// private T OpenSingleWindow<T>(bool _forceSync, int _functionalOrder) where T : Window
|
// {
|
// var name = typeof(T).Name;
|
// var window = OpenSingleWindow(name, _forceSync, _functionalOrder);
|
// if (window != null)
|
// {
|
// return window as T;
|
// }
|
// else
|
// {
|
// return null;
|
// }
|
// }
|
//
|
// private Window OpenSingleWindow(string _name, bool _forceSync, int _functionalOrder)
|
// {
|
// Window win = null;
|
// if (TryGetWindow(_name, out win))
|
// {
|
// if (win.windowState == Window.WindowState.Closed)
|
// {
|
// win.functionOrder = _functionalOrder;
|
// win.playAnimation = true;
|
// win.Open();
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("{0} 窗口已经打开!", _name);
|
// }
|
//
|
// return win;
|
// }
|
//
|
// if (_forceSync || AssetSource.uiFromEditor)
|
// {
|
// win = GetWindowInstance(_name, false);
|
// if (win != null)
|
// {
|
// win.functionOrder = _functionalOrder;
|
// win.playAnimation = true;
|
// win.Open();
|
// }
|
//
|
// return win;
|
// }
|
// else
|
// {
|
// GetWindowInstanceAsync(_name,
|
// (bool ok, UnityEngine.Object _object) =>
|
// {
|
// if (TryGetWindow(_name, out win))
|
// {
|
// if (win.windowState == Window.WindowState.Closed)
|
// {
|
// win.functionOrder = _functionalOrder;
|
// win.playAnimation = true;
|
// win.Open();
|
// }
|
// else
|
// {
|
// DebugEx.Log(string.Format("{0} 窗口已经打开!", _name));
|
// }
|
// }
|
// }
|
// );
|
//
|
// return null;
|
// }
|
// }
|
//
|
// private bool TryGetWindow<T>(out T _win) where T : Window
|
// {
|
// var name = typeof(T).Name;
|
// Window window = null;
|
// if (TryGetWindow(name, out window))
|
// {
|
// _win = windows[name] as T;
|
// return _win != null;
|
// }
|
// else
|
// {
|
// _win = null;
|
// return false;
|
// }
|
// }
|
//
|
// private bool TryGetWindow(string _name, out Window _win)
|
// {
|
// WindowTrim(_name);
|
// if (windows.ContainsKey(_name))
|
// {
|
// _win = windows[_name];
|
// return _win != null;
|
// }
|
// else
|
// {
|
// _win = null;
|
// return false;
|
// }
|
// }
|
//
|
// private void WindowTrim(string _windowName)
|
// {
|
// if (windows.ContainsKey(_windowName))
|
// {
|
// if (windows[_windowName] == null || windows[_windowName].gameObject == null)
|
// {
|
// windows.Remove(_windowName);
|
// }
|
// }
|
// }
|
//
|
// private T GetWindowInstance<T>(bool _fromLocal) where T : Window
|
// {
|
// var prefabName = typeof(T).Name;
|
// var window = GetWindowInstance(prefabName, _fromLocal);
|
// if (window != null)
|
// {
|
// return window as T;
|
// }
|
// else
|
// {
|
// return null;
|
// }
|
// }
|
//
|
// private Window GetWindowInstance(string _name, bool _fromLocal)
|
// {
|
// if (windows.ContainsKey(_name))
|
// {
|
// return windows[_name];
|
// }
|
// else
|
// {
|
// var prefab = _fromLocal ? BuiltInLoader.LoadPrefab(_name) : UILoader.LoadWindow(_name);
|
// prefab.SetActive(false);
|
// var instance = GameObject.Instantiate(prefab);
|
// instance.name = _name;
|
// if (AssetSource.uiFromEditor)
|
// {
|
// prefab.SetActive(true);
|
// }
|
//
|
// if (_fromLocal)
|
// {
|
// BuiltInLoader.UnLoadPrefab(_name);
|
// }
|
// else
|
// {
|
// UILoader.UnLoadWindowAsset(_name);
|
// }
|
//
|
// var window = instance.GetComponent<Window>();
|
// if (window != null)
|
// {
|
// windows[_name] = window;
|
// }
|
// else
|
// {
|
// DebugEx.LogFormat("无法获得 {0} 的资源!", _name);
|
// }
|
//
|
// return window;
|
// }
|
// }
|
//
|
// private void GetWindowInstanceAsync<T>(Action<bool, UnityEngine.Object> _callBack) where T : Window
|
// {
|
// GetWindowInstanceAsync(typeof(T).Name, _callBack);
|
// }
|
//
|
// private void GetWindowInstanceAsync(string _name, Action<bool, UnityEngine.Object> _callBack)
|
// {
|
// Action<bool, UnityEngine.Object> addAction = (bool _ok, UnityEngine.Object _object) =>
|
// {
|
// var prefabName = _name;
|
// Window window = null;
|
// if (!windows.ContainsKey(_name))
|
// {
|
// var prefab = _object as GameObject;
|
// prefab.SetActive(false);
|
// var instance = GameObject.Instantiate(prefab);
|
//
|
// if (AssetSource.uiFromEditor)
|
// {
|
// prefab.SetActive(true);
|
// }
|
//
|
// UILoader.UnLoadWindowAsset(prefabName);
|
// window = instance.GetComponent<Window>();
|
// var typeName = window.GetType().Name;
|
// instance.name = typeName;
|
// if (window != null)
|
// {
|
// windows[typeName] = window;
|
// }
|
// else
|
// {
|
// Debug.LogFormat("无法获得 {0} 的资源!", _name);
|
// }
|
// }
|
//
|
// if (_callBack != null)
|
// {
|
// _callBack(_ok && window != null, _object);
|
// }
|
// };
|
//
|
// asyncLoad.PushTask(new WindowAsyncLoad.Task(_name, addAction));
|
// }
|
//
|
// public enum WindowStage
|
// {
|
// Launch,
|
// Login,
|
// SelectRole,
|
// Other,
|
// }
|
//
|
// public enum CloseAllIgnoreType
|
// {
|
// Base = 1,
|
// System = 2,
|
// Custom = 3,
|
// BaseAndCustom = 4,
|
// SystemAndCustom = 5,
|
// }
|
//
|
// }
|
//
|
//
|
// }
|