/// <summary> /// 关闭UI /// </summary> /// <param name="UI">目标UI</param> /// <param name="isPlayAnim">是否播放关闭动画</param> /// <param name="callback">动画播放完毕回调</param> /// <param name="objs">回调传参</param> public static void CloseUIWindow(UIWindowBase UI, bool isPlayAnim = true, UICallBack callback = null, params object[] objs) { RemoveUI(UI); //移除UI引用 UI.RemoveAllListener(); //s_UILayerManager.RemoveUI(UI); if (isPlayAnim) { //动画播放完毕删除UI if (callback != null) { callback += CloseUIWindowCallBack; } else { callback = CloseUIWindowCallBack; } UI.windowStatus = UIWindowBase.WindowStatus.CloseAnim; UIAnimManager.StartExitAnim(UI, callback, objs); } else { CloseUIWindowCallBack(UI, objs); } }
public virtual IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack) { //默认无动画 l_animComplete(this, l_callBack); yield break; }
public static void OpenUIAsync(string UIName, UICallBack callback, params object[] objs) { ResourceManager.LoadAsync(UIName, (resObject) => { OpenUIWindow(UIName, callback, objs); }); }
/// <summary> /// 打开window /// </summary> /// <param name="uiCallBack"></param> /// <param name="objs"></param> /// <returns></returns> public T OpenWindow <T>(bool openAnim = true, UICallBack uiCallBack = null, params object[] objs) where T : UIWindowBase { string windowName = typeof(T).Name; if (!_windowDict.ContainsKey(windowName)) { LoadWindow(windowName); } T window = _windowDict[windowName] as T; //window.transform.SetAsLastSibling(); window.OnOpen(objs); window.Status = UIStatus.Open; if (openAnim) { window.StartCoroutine(window.StartOpenAnim(uiCallBack, objs)); } if (_windowStack.Count > 0) { var curTopWindow = _windowStack.Peek(); if (curTopWindow != null) { curTopWindow.OnLostFocus(); } } window.OnFocus(); _windowStack.Push(window); return(window); }
/// <summary> /// 打开UI /// </summary> /// <param name="UIName">UI名</param> /// <param name="callback">动画播放完毕回调</param> /// <param name="objs">回调传参</param>` /// <returns>返回打开的UI</returns> public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = null, params object[] objs) { //从隐藏UI中取出 var uiBase = GetHideUI(UIName); if (uiBase == null) { uiBase = CreateUIWindow(UIName); } //从隐藏UI中删除 RemoveHideUI(uiBase); //加入显示中UI AddUI(uiBase); //派发OnOpen事件 UISystemEvent.Dispatch(uiBase, UIEvent.OnOpen); try { uiBase.OnOpen(); } catch (Exception e) { Debug.LogError(UIName + " OnOpen Exception: " + e.ToString()); } //设置层级 m_uiLayerManager.SetLayer(uiBase); //播放动画 m_uiAnimManager.StartEnterAnim(uiBase, callback, objs); return(uiBase); }
/// <summary> /// 关闭UI /// </summary> /// <param name="UI">目标UI</param> /// <param name="isPlayAnim">是否播放关闭动画</param> /// <param name="callback">动画播放完毕回调</param> /// <param name="objs">回调传参</param> public static void CloseUIWindow(UIWindowBase UI, bool isPlayAnim = true, UICallBack callback = null, params object[] objs) { //从显示UI中移除UI RemoveUI(UI); //层级管理 m_uiLayerManager.RemoveUI(UI); //是否有退出动画 if (isPlayAnim) { //动画播放完毕删除UI if (callback != null) { callback += CloseUIWindowCallBack; } else { callback = CloseUIWindowCallBack; } m_uiAnimManager.StartExitAnim(UI, callback, objs); } else { CloseUIWindowCallBack(UI, objs); } }
/// <summary> /// 打开UI /// </summary> /// <param name="l_UIname">UI名</param> /// <param name="l_callback">动画播放完毕回调</param> /// <param name="l_objs">回调传参</param> /// <returns>返回打开的UI</returns> public static UIWindowBase OpenUIWindow(string l_UIname, UICallBack l_callback = null, params object[] l_objs) { UIWindowBase l_UIbase = GetHideUI(l_UIname); if (l_UIbase == null) { l_UIbase = CreateUIWindow(l_UIname); } RemoveHideUI(l_UIbase); AddUI(l_UIbase); UISystemEvent.Dispatch(l_UIbase, UIEvent.OnOpen); //派发OnOpen事件 try{ l_UIbase.OnOpen(); } catch (Exception e) { Debug.LogError("OnOpen Exception: " + e.ToString()); } s_UILayerManager.SetLayer(l_UIbase); //设置层级 s_UIAnimManager.StartEnterAnim(l_UIbase, l_callback, l_objs); //播放动画 return(l_UIbase); }
public virtual IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { //默认无动画 l_animComplete(this, l_callBack, objs); yield break; }
/// <summary> /// 打开UI /// </summary> /// <param name="UIName">UI名</param> /// <param name="callback">动画播放完毕回调</param> /// <param name="objs">回调传参</param> /// <returns>返回打开的UI</returns> public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = null, params object[] objs) { UIWindowBase UIbase = GetHideUI(UIName); if (UIbase == null) { UIbase = CreateUIWindow(UIName); } else { UIbase.gameObject.SetActive(true); } RemoveHideUI(UIbase); AddUI(UIbase); UISystemEvent.Dispatch(UIbase, UIEvent.OnOpen); //派发OnOpen事件 try{ UIbase.OnOpen(); } catch (Exception e) { Debug.LogError("OnOpen Exception: " + e.ToString()); } s_UILayerManager.SetLayer(UIbase); //设置层级 s_UIAnimManager.StartEnterAnim(UIbase, callback, objs); //播放动画 return(UIbase); }
static int OpenUIWindow(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); string arg0 = ToLua.CheckString(L, 1); UICallBack arg1 = null; LuaTypes funcType2 = LuaDLL.lua_type(L, 2); if (funcType2 != LuaTypes.LUA_TFUNCTION) { arg1 = (UICallBack)ToLua.CheckObject(L, 2, typeof(UICallBack)); } else { LuaFunction func = ToLua.ToLuaFunction(L, 2); arg1 = DelegateFactory.CreateDelegate(typeof(UICallBack), func) as UICallBack; } object[] arg2 = ToLua.ToParamsObject(L, 3, count - 2); UIWindowBase o = UIManager.OpenUIWindow(arg0, arg1, arg2); ToLua.Push(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int RemoveAllUIEvent(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); UIEvent arg0 = (UIEvent)ToLua.CheckObject(L, 1, typeof(UIEvent)); UICallBack arg1 = null; LuaTypes funcType2 = LuaDLL.lua_type(L, 2); if (funcType2 != LuaTypes.LUA_TFUNCTION) { arg1 = (UICallBack)ToLua.CheckObject(L, 2, typeof(UICallBack)); } else { LuaFunction func = ToLua.ToLuaFunction(L, 2); arg1 = DelegateFactory.CreateDelegate(typeof(UICallBack), func) as UICallBack; } UISystemEvent.RemoveAllUIEvent(arg0, arg1); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
IEnumerator LoadSceneAsyncIE(int levelId, Action onComplete) { string levelName = "Level_" + levelId; bool complete = false; UICallBack callback = (objs) => { complete = true; }; UILoadingWindow loadingWindow = UIManager.Instance.OpenWindow <UILoadingWindow>(true, callback); while (!complete) { yield return(null); } var asyncOperation = SceneManager.LoadSceneAsync(levelName); asyncOperation.completed += (op) => { onComplete?.Invoke(); }; asyncOperation.allowSceneActivation = false; while (asyncOperation.progress < 0.9f) { loadingWindow.SetProgress(asyncOperation.progress / 9 * 10); yield return(null); } loadingWindow.SetProgress(1); while (loadingWindow.Progress < 1) { yield return(null); } yield return(new WaitForSeconds(LoadCompleteDelay)); UIManager.Instance.CloseWindow(loadingWindow); asyncOperation.allowSceneActivation = true; GameManager.CurLevelId = levelId; }
public virtual IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { //默认无动画 l_animComplete(this, l_callBack, objs); yield return(null); }
/// <summary> /// 打开UI /// </summary> /// <param name="UIName">UI名</param> /// <param name="callback">动画播放完毕回调</param> /// <param name="objs">回调传参</param>` /// <returns>返回打开的UI</returns> public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = null, params object[] objs) { UIWindowBase UIbase = GetHideUI(UIName); if (UIbase == null) { UIbase = CreateUIWindow(UIName); } RemoveHideUI(UIbase); AddUI(UIbase); UIStackManager.OnUIOpen(UIbase); UILayerManager.SetLayer(UIbase); //设置层级 UIbase.windowStatus = UIWindowBase.WindowStatus.OpenAnim; UISystemEvent.Dispatch(UIbase, UIEvent.OnOpen); //派发OnOpen事件 try { UIbase.OnOpen(); } catch (Exception e) { Debug.LogError(UIName + " OnOpen Exception: " + e.ToString()); } UISystemEvent.Dispatch(UIbase, UIEvent.OnOpened); //派发OnOpened事件 UIAnimManager.StartEnterAnim(UIbase, callback, objs); //播放动画 return(UIbase); }
public virtual IEnumerator EnterAnim(UIAnimCallBack animComplete, UICallBack callBack, params object[] objs) { //默认无动画 animComplete(this, callBack, objs); yield break; }
public virtual IEnumerator StartOpenAnim(UICallBack uiCallBack, params object[] objs) { if (uiCallBack != null) { uiCallBack(objs); } yield break; }
//UI的退出动画 public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { AnimSystem.UguiSizeDelta(GetGameObject("Image"), new Vector2(1000, 100), new Vector2(1000, 000), 0.3f); yield return(new WaitForSeconds(0.3f)); yield return(base.ExitAnim(l_animComplete, l_callBack, objs)); }
/// <summary> /// 关闭时的动画效果, /// </summary> /// <param name="uiCallBack"></param> /// <param name="objs"></param> /// <returns></returns> public override IEnumerator StartCloseAnim(UICallBack uiCallBack, params object[] objs) { m_CanvasGroup.DOFade(0, 0.5f).OnComplete(() => { StartCoroutine(base.StartCloseAnim(uiCallBack, objs)); }); yield return(new WaitForEndOfFrame()); }
//UI的进入动画 public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { AnimSystem.UguiSizeDelta(GetGameObject("Image"), new Vector2(1000, 0), new Vector2(1000, 100), 0.4f, interp: InterpType.OutBack); yield return(new WaitForSeconds(2)); yield return(base.EnterAnim(l_animComplete, l_callBack, objs)); }
static int CloseUIWindow(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); if (TypeChecker.CheckTypes(L, 1, typeof(string), typeof(bool), typeof(UICallBack)) && TypeChecker.CheckParamsType(L, typeof(object), 4, count - 3)) { string arg0 = ToLua.ToString(L, 1); bool arg1 = LuaDLL.lua_toboolean(L, 2); UICallBack arg2 = null; LuaTypes funcType3 = LuaDLL.lua_type(L, 3); if (funcType3 != LuaTypes.LUA_TFUNCTION) { arg2 = (UICallBack)ToLua.ToObject(L, 3); } else { LuaFunction func = ToLua.ToLuaFunction(L, 3); arg2 = DelegateFactory.CreateDelegate(typeof(UICallBack), func) as UICallBack; } object[] arg3 = ToLua.ToParamsObject(L, 4, count - 3); UIManager.CloseUIWindow(arg0, arg1, arg2, arg3); return(0); } else if (TypeChecker.CheckTypes(L, 1, typeof(UIWindowBase), typeof(bool), typeof(UICallBack)) && TypeChecker.CheckParamsType(L, typeof(object), 4, count - 3)) { UIWindowBase arg0 = (UIWindowBase)ToLua.ToObject(L, 1); bool arg1 = LuaDLL.lua_toboolean(L, 2); UICallBack arg2 = null; LuaTypes funcType3 = LuaDLL.lua_type(L, 3); if (funcType3 != LuaTypes.LUA_TFUNCTION) { arg2 = (UICallBack)ToLua.ToObject(L, 3); } else { LuaFunction func = ToLua.ToLuaFunction(L, 3); arg2 = DelegateFactory.CreateDelegate(typeof(UICallBack), func) as UICallBack; } object[] arg3 = ToLua.ToParamsObject(L, 4, count - 3); UIManager.CloseUIWindow(arg0, arg1, arg2, arg3); return(0); } else { return(LuaDLL.luaL_throw(L, "invalid arguments to method: UIManager.CloseUIWindow")); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
//UI的退出动画 public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { //AnimSystem.uguiAlpha(gameObject, 1, 0, 1, InteType.Linear, true, (object[] obj) => //{ // l_animComplete(this, l_callBack, objs); //}); yield return(new WaitForEndOfFrame()); }
//UI的退出动画 public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { AnimSystem.UguiAlpha(gameObject, 1, 0, 1, callBack: (object[] obj) => { base.ExitAnim(l_animComplete, l_callBack, objs); }); yield break; }
//UI的进入动画 public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { AnimSystem.UguiAlpha(gameObject, 0, 1, 1, interp: InterpType.Linear, isChild: true, callBack: (object[] obj) => { l_animComplete(this, l_callBack, objs); }); yield return(new WaitForSeconds(5)); }
//UI的退出动画 public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { AnimSystem.UguiAlpha(gameObject, 1, 0, 1, InterpType.Linear, true, (object[] obj) => { base.ExitAnim(l_animComplete, l_callBack, objs); }); return(null); }
//UI的退出动画 public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { AnimSystem.UguiAlpha(gameObject, 1, 0, 1, callBack: (object[] obj) => { base.ExitAnim(l_animComplete, l_callBack, objs); }); yield break; }
//UI的进入动画 public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { AnimSystem.UguiAlpha(gameObject, 0, 1, 1, callBack: (object[] obj) => { base.EnterAnim(l_animComplete, l_callBack, objs); }); return(null); }
//UI的退出动画 public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { AnimSystem.UguiAlpha(gameObject, null, 0, callBack: (object[] obj) => { StartCoroutine(base.ExitAnim(l_animComplete, l_callBack, objs)); }); yield return(new WaitForEndOfFrame()); }
void Start() { gameObject.SetActive(false); gameObject.GetComponent <Canvas>().sortingOrder = 1; UICallBack uiCallBack = new UICallBack(); uiCallBack.GameObject = gameObject; MainManager.Instance.UiMananger.Dictionary.Add(i, uiCallBack); close.onClick.AddListener(closeCallback); }
public static void RemoveAllUIEvent(UIEvent UIEvent, UICallBack l_CallBack) { if (s_allUIEvents.ContainsKey(UIEvent)) { s_allUIEvents[UIEvent] -= l_CallBack; } else { Debug.LogError("RemoveAllUIEvent don't exits: " + UIEvent); } }
/// <summary> /// 每个UI都会派发的事件 /// </summary> /// <param name="Event">事件类型</param> /// <param name="callback">回调函数</param> public static void RegisterAllUIEvent(UIEvent UIEvent, UICallBack CallBack) { if (s_allUIEvents.ContainsKey(UIEvent)) { s_allUIEvents[UIEvent] += CallBack; } else { s_allUIEvents.Add(UIEvent, CallBack); } }
/// <summary> /// 打开时的动画效果 /// </summary> /// <param name="uiCallBack"></param> /// <param name="objs"></param> /// <returns></returns> public override IEnumerator StartOpenAnim(UICallBack uiCallBack, params object[] objs) { m_CanvasGroup.alpha = 0; m_CanvasGroup.blocksRaycasts = false; uiCallBack += (args) => { m_CanvasGroup.blocksRaycasts = true; }; m_CanvasGroup.DOFade(1, 0.4f).OnComplete(() => { StartCoroutine(base.StartOpenAnim(uiCallBack, objs)); }); yield return(new WaitForEndOfFrame()); }
/// <summary> /// 每个UI都会派发的事件 /// </summary> /// <param name="Event">事件类型</param> /// <param name="callback">回调函数</param> public static void RegisterAllUIEvent(UIEvent l_UIEvent, UICallBack l_CallBack) { if (s_allUIEvents.ContainsKey(l_UIEvent)) { s_allUIEvents[l_UIEvent] += l_CallBack; } else { s_allUIEvents.Add(l_UIEvent,l_CallBack); } }
/// <summary> /// 注册单个UI派发的事件 /// </summary> /// <param name="Event">事件类型</param> /// <param name="callback"回调函数></param> public static void RegisterEvent(string l_UIName,UIEvent l_UIEvent, UICallBack l_CallBack) { if (s_singleUIEvents.ContainsKey(l_UIName)) { if (s_singleUIEvents[l_UIName].ContainsKey(l_UIEvent)) { s_singleUIEvents[l_UIName][l_UIEvent] += l_CallBack; } else { s_singleUIEvents[l_UIName].Add(l_UIEvent,l_CallBack); } } else { s_singleUIEvents.Add(l_UIName,new Dictionary<UIEvent,UICallBack>()); s_singleUIEvents[l_UIName].Add(l_UIEvent, l_CallBack); } }
//UI的进入动画 public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { return base.EnterAnim(l_animComplete, l_callBack, objs); }