public void Exit <T>() where T : BaseCtrl { var findCtrl = FindCtrl <T>(); if (findCtrl == currMainCtrl) { //先打开上一组 ctrl 之后也改成异步回调之后再关闭 currMainCtrl = null; var nextIndex = ctrlCacheList.Count - 2; findCtrl.Inactive(); findCtrl.Exit(); ctrlCacheList.Remove(findCtrl); if (nextIndex >= 0) { BaseCtrl currCtrl = ctrlCacheList[nextIndex]; currCtrl.Active(); currMainCtrl = currCtrl; } } else { Logx.LogError("findCtrl == ctrl : " + typeof(T) + " != " + currMainCtrl?.GetType()); return; } }
/// <summary> /// 添加控制器 /// </summary> /// <param name="o"></param> static void AddCtrl(BaseCtrl o) { var type = o.GetType(); if (!Ctrls.ContainsKey(type.Name)) { Ctrls.Add(type.Name, o); } }
public static void InitializeThumbCustomShape(this BaseCtrl baseCtrl) { foreach (var ctrl in baseCtrl.Controls) { MaterialSlider ms = ctrl as MaterialSlider; if (ms != null) { GraphicsPath gp2 = new GraphicsPath(); gp2.AddEllipse(new RectangleF((0 + ms.Height) / 2f, (0 + ms.Height) / 2f, 10, 10)); ms.ThumbCustomShape = gp2; } } }
/// <summary> /// 打开 ctrl /// </summary> /// <param name="ctrlName"></param> /// <param name="args"></param> public void OpenCtrl(string ctrlName, params object[] args) { if (!ctrlDic.ContainsKey(ctrlName)) { string file = Assembly.GetExecutingAssembly().GetName().Name; Assembly assembly = Assembly.Load(file); BaseCtrl ctrl = (BaseCtrl)assembly.CreateInstance(ctrlName); ctrl.ctrlName = ctrlName; ctrl.Start(args); ctrlDic.Add(ctrlName, ctrl); } }
/// <summary> /// 关闭 ctrl /// </summary> /// <param name="ctrlName"></param> public void CloseCtrl(string ctrlName) { if (ctrlDic.ContainsKey(ctrlName)) { BaseCtrl ctrl = ctrlDic[ctrlName]; if (ctrl.view != null) { ViewManager.Instance.RemoveView(ctrl.view.viewName); } ctrl.OnDestroy(); ctrlDic.Remove(ctrlName); } }
public float speed = 0; //当前速度 /// <summary> /// 在派生类中调用以进行初始化 /// </summary> protected void Awake() { m_State = GetComponent <BaseState>(); m_rigidbody = GetComponent <Rigidbody>(); BaseSkill[] m_Skills = GetComponents <BaseSkill>(); foreach (var item in m_Skills) { item.m_Actor = this; skillBook.Add(item.skillType, item); } m_Ctrl = GetComponent <BaseCtrl>(); m_Animator = GetComponent <Animator>(); //m_rigidbody.velocity = maxSpeed * transform.forward; }
public void Enter <T>(CtrlArgs args = null) where T : BaseCtrl, new() { var findCtrl = FindCtrl <T>(); if (findCtrl != null) { //已经存在 目前的方案是 :直接把 ctrl 提到最前面 ctrlCacheList.Remove(findCtrl); ctrlCacheList.Add(findCtrl); findCtrl.Enter(args); findCtrl.Active(); currMainCtrl = findCtrl; //todo : gameObject 的层级提到最高 } else { //没找到 开始一个新的 ctrl BaseCtrl newCtrl = new T(); newCtrl.Init(); ctrlCacheList.Add(newCtrl); currMainCtrl = newCtrl; //这里的回调需要 ctrl 自行在加载完之后调用 ctrl 中的 LoadFinish(之后流程会优化) newCtrl.StartLoad(() => { newCtrl.Enter(args); newCtrl.Active(); var nextIndex = ctrlCacheList.Count - 2; if (nextIndex >= 0) { BaseCtrl currCtrl = ctrlCacheList[nextIndex]; currCtrl.Inactive(); } }); } }
/// <summary> /// 创建页面 /// </summary> /// <param name="ctrl"></param> /// <param name="viewName"></param> /// <param name="args"></param> /// <returns></returns> public BaseView CreateView(BaseCtrl ctrl, string viewName, params object[] args) { BaseView view; if (!m_ViewDic.ContainsKey(viewName)) { string file = Assembly.GetExecutingAssembly().GetName().Name; Assembly assembly = Assembly.Load(file); view = (BaseView)assembly.CreateInstance(viewName); view.viewName = viewName; view.iCtrl = ctrl; GameObject viewObj = ResourceManager.Instance.LoadPrefabAndInstance(view.PrefabPath()); viewObj.Attach(m_CanvasObj); view.transform = viewObj.transform; m_ViewDic.Add(viewName, view); } else { view = m_ViewDic[viewName]; if (view.isDead) { GameObject viewObj = ResourceManager.Instance.LoadPrefabAndInstance(view.PrefabPath()); viewObj.Attach(m_CanvasObj); view.transform = viewObj.transform; view.viewName = viewName; view.iCtrl = ctrl; view.isDead = false; } } view.StartView(args); return(view); }
public void DeleteMe() { instance = null; }