主界面中
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;然后调整位置。
网络消息接收和发送