项目实战02-邮件

主界面中

UIEventListener.Get(_spui.BT_Mail).onClick += BTClick_Mail;

判断是否有新邮件,以及邮件打开

 void SetMail(object[] args = null)
        {
            bool isEmpty = PlayerData.Instance.AllMail.Count <= 0;

            bool hasNew = false;
            foreach (var it in PlayerData.Instance.AllMail.Values)
            {
                if (!it.HasRead && it.HasGet)
                {
                    hasNew = true;
                    break;
                }
            }

            _spui.SetMail(isEmpty, hasNew);
        }


        void BTClick_Mail(GameObject sender)
        {
            //NetSender.Instance.OnMapFallByDeadTide(2);
            Globals.MUIManager.AddUI<UI_Mail>();
        }
 public void AddUI<T>(GUICallback<T> callback = null) where T : HotFix_Project.UI.UI_Logic
        {

            T uiLogic = GetUI<T>();
            if (null == uiLogic)
            {
                if (typeof(T) != typeof(UI_Guidance))
                {
                    Rooter.RemoveHand();
                }


                string ui_name = typeof(T).ToString();
                ui_name = ui_name.Substring(ui_name.LastIndexOf('.') + 1);


                GameObject uiObj = ILRT.Instance.MResourceManager.CreatGameObjectAtWord(uiPfbPath + ui_name, Vector2.zero);
                if (uiObj == null)
                {
                    MDebug.LogError("didn't find " + ui_name + "'s perfab");
                    return;
                }
                uiObj.name = ui_name;
                Transform uiTrans = uiObj.transform;
                uiTrans.parent = uiRoot.transform;
                uiTrans.localScale = Vector3.one;
                uiTrans.localPosition = Vector3.zero;

                FindLabel(uiTrans);
                //uiLogic = uiObj.AddComponent<T>();

                uiLogic = System.Activator.CreateInstance<T>();//动态创建了UI_Mail


                uiLogic.Init(uiObj);//执行UI_Mail中的方法

                existingUI[typeof(T).ToString()] = uiLogic;

            }
            else
            {
                if (uiLogic.AwaysExits)
                {
                    uiLogic.Hide(false);
                }
            }
            if (null != callback)
                callback(uiLogic);
        }

 public class UI_Mail : UI_Logic,继承关系

脚本中的 uiLogic.Init(uiObj);     

 public abstract class UI_Logic //: MonoBehaviour
    {
        public SPUI_Panel baseSpui;
        public void Init(GameObject go)
        {
            gameObject = go;
            transform = go.transform;
            InitializeUI();//为抽象方法

        }

执行了UI_Mail中的

 protected override void InitializeSPUI()
        {
            _spui = new SPUI_Mail();
            _spui.BaseInit(base.gameObject, ILRT.Instance);
            base.baseSpui = _spui;//脚本和UI界面绑定

            mailData = PlayerData.Instance.AllMail;//获取到的数据

            _spui.OnDeleteAll = OnClickDeletaAll;
            _spui.OnGetAll = OnClickGetAll;
            _spui.OnGetOneMail = OnClickGetOne;//给SPU的委托指定方法
            _spui.OnDeleteOneMail = OnClickDeleteOne;
            _spui.OnReadOneMail = OnReadOne;

            base.AddSub(EventNames.Mail.GetAll, OnRecvGetAll);//监听接受到消息
            base.AddSub(EventNames.Mail.GetOne, OnRecvGetOne);
            base.AddSub(EventNames.Mail.DeleteAll, OnRecvDeleteAll);
            base.AddSub(EventNames.Mail.DeleteOne, OnRecvDeleteOne);

            UIEventListener.Get(_spui.BT_Close).onClick += base.Close;

            SetAllItem();//给UI界面的数据赋值
        }

SPUI_Panel类   _spui.BaseInit(base.gameObject, ILRT.Instance);

  public void BaseInit(GameObject obj, MonoBehaviour root)
        {
            _root = root;
            thisTransform = obj.transform;
            thisGameObject = obj;
            InitializeSPUI();
        }

  protected abstract void InitializeSPUI();

SPUI_Mail : SPUI_Panel   执行    SPUI_Mail中的   InitializeSPUI

给UI界面的数据modle赋值,给邮件信息赋值,给邮件中的奖励信息赋值

        public void SetAllItem()
        {
            List<SPUI_Mail.MailItem> list = new List<SPUI_Mail.MailItem>();
            var itemcfg = Globals.MDataTableManager.GetConfig<ItemConfig>();//配置图片的类
            foreach (var it in mailData.Values)
            {

                SPUI_Mail.MailItem mail = new SPUI_Mail.MailItem();
                mail.Id = it.Id;
                mail.BtName = it.BtName;
                mail.HasGet = it.HasGet;
                mail.HasRead = it.HasRead;
                mail.Content = it.Content;
                mail.SenderName = it.SenderName;
                mail.Type = (SPUI_Mail.EMailType)it.type;
                mail.SendTime = Globals.MTimeManager.ServerTimeToLocalTime(it.time);

                mail.Items = new List<UIItem>();

                foreach (var kvp in it.Items)
                {
                    var cfgItem = itemcfg.GetConfigElementByID(kvp.Key);
                    if (cfgItem != null)
                    {
                        UIItem item = new SPUI.UIItem();
                        item.id = kvp.Key;
                        item.count = kvp.Value;
                        item.icon = cfgItem.Icon;
                        mail.Items.Add(item);
                    }
                }
                list.Add(mail);

            }
            _spui.ShowAllMail(list);

        }

//配置图片的类

 private SystemConfig _mSystemConfig = new SystemConfig();

 public T GetConfig<T>() where T : ConfigBase
        {
            if (null == _mSystemConfig)
                return null;

            return _mSystemConfig.GetConfig<T>();
        }
public T GetConfig<T>() where T : ConfigBase
        {
            System.Type t = typeof(T);

            if (!_configs.ContainsKey(t.Name))
            {
                if (!AddConfig<T>(t.Name))
                {
                    return null;
                }
            }
            return (T)(_configs[t.Name]);
        }

SPUI_Mail 

InitializeSPUI()方法:找物体,添加点击事件

UI_Mail   得到数据,   给  SPUI_Mail  中的委托赋值     SPUI_Mail中点击方法的注册    还有监听服务返回数据

UI_Mail中点击执行的逻辑   

通过委托去执行SPUI_Mail中的请求服务=====》》返回数据======》》执行监听(改变UI_Mail中的数据层)======》》通知界面======》》界面中的数据层做相应的改变=======》》界面的刷新

实例化物体后,设置成true;然后调整位置。

网络消息接收和发送

猜你喜欢

转载自blog.csdn.net/qq_35647121/article/details/81120118
02-