using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using Module.Log; public class MailRootLogic : MonoBehaviour { public void OnEnable() { InitMailList(); SetMailInfo(null); MailData.delMailUpdate += UpdateMail; } public void OnDisable() { MailData.delMailUpdate -= UpdateMail; } #region mail list public const int MAX_MAIL_COUNT = 100; public GameObject _EmptyMailBox; public GameObject _MailBoxInfo; public UIContainerSelect _MailContainer; public Text _MailCount; public void InitMailList() { if (MailData.UserMailMap.Count > 0) { _EmptyMailBox.SetActive(false); _MailBoxInfo.SetActive(true); } else { _EmptyMailBox.SetActive(true); _MailBoxInfo.SetActive(false); } List mails = new List(); foreach (var mail in MailData.UserMailMap.Values) { mails.Add(mail); } //mails.Reverse(); mails.Sort((mailA,mailB) => { if (mailA.bReaded > mailB.bReaded) return 1; if (mailA.bReaded < mailB.bReaded) return -1; if (mailA.bReaded == mailB.bReaded) { int time = mailA.sortTime - mailB.sortTime; if (time > 0) return -1; if (time < 0) return 1; return 0; } return 0; }); _MailContainer.InitSelectContent(mails, null, SelectMailItem); SetMailInfo(null); //_MailCount.text = MailData.UserMailMap.Count.ToString() + "/" + MAX_MAIL_COUNT.ToString(); _MailCount.text = ""; } public void UpdateMail(MailData.MailUpdateType updateType, MailData.UserMail curMail) { if (updateType == MailData.MailUpdateType.UPDATE && _SelectedMail == curMail) { SetMailInfo(_SelectedMail); } else { InitMailList(); ChatFrameLogic.Instance().UpdateRedDotTip(); FriendAndMailRoot.Instance().UpdateMailRedTip(); } } private void SelectMailItem(object mailObj) { MailData.UserMail userMail = mailObj as MailData.UserMail; if (userMail == null) { _EmptyMailBox.SetActive(true); _MailBoxInfo.SetActive(true); return; } _EmptyMailBox.SetActive(false); _MailBoxInfo.SetActive(false); SetMailInfo(userMail); } #endregion #region mail info public GameObject _EmptyMailPanel; public GameObject _MailInfoPanel; public Text _MailTitle; public Text _MailContex; public Text _MailSender; public Text _MailTime; public UIContainerBase _MailItemContainer; public GameObject _BtnGet; public GameObject _BtnDelete; private MailData.UserMail _SelectedMail; private void SetMailInfo(MailData.UserMail mailData) { if (mailData == null) { _EmptyMailPanel.SetActive(true); _MailInfoPanel.SetActive(false); _SelectedMail = null; _MailBoxInfo.SetActive(true); } else { _SelectedMail = mailData; mailData.bReaded = 1; ReadMail(); _EmptyMailPanel.SetActive(false); _MailInfoPanel.SetActive(true); _MailTitle.text = mailData.SenderName; _MailContex.text = mailData.text; _MailSender.text = mailData.SenderName; _MailTime.text = mailData.time; if (!mailData.bGetItem && (mailData.itemID.Length > 0 || mailData.moneyType.Length > 0)) { _BtnGet.SetActive(true); _BtnDelete.SetActive(false); List mailItems = new List(); for (int i = 0; i < mailData.itemID.Length; ++i) { CommonItemContainerItem.ItemInfo itemInfo = new CommonItemContainerItem.ItemInfo(); itemInfo.itemID = mailData.itemID[i]; itemInfo.itemNum = mailData.itemCount[i]; mailItems.Add(itemInfo); } for (int i = 0; i < mailData.moneyType.Length; ++i) { CommonItemContainerItem.ItemInfo itemInfo = new CommonItemContainerItem.ItemInfo(); itemInfo.itemSprite = PlayerData.MONEY.GetMoneySpriteStr((MONEYTYPE)mailData.moneyType[i]); itemInfo.itemNum = mailData.moneyCount[i]; mailItems.Add(itemInfo); } _MailItemContainer.InitContentItem(mailItems, MailItemSelect); } else { _BtnGet.SetActive(false); _BtnDelete.SetActive(true); _MailItemContainer.InitContentItem(null, MailItemSelect); } MailItemLogic curMailItem = _MailContainer.GetSelectedItem() as MailItemLogic; if (curMailItem != null && curMailItem.Mailkey == mailData.key) { curMailItem.InitMailItem(); } } } public void MailItemSelect(object mailItemObj) { CommonItemContainerItem.ItemInfo mailItem = mailItemObj as CommonItemContainerItem.ItemInfo; if (mailItem == null) return; if (mailItem.itemID <= 0) return; ItemTooltipsLogic.ShowItemTooltip(mailItem.itemID, ItemTooltipsLogic.ShowType.Info, Vector3.zero); } #endregion #region mail oprate // 删除当前邮件 public void OnClickDelCur() { MailData.UserMail curMail = _SelectedMail; if (null == curMail) { return; } if (curMail.itemID.Length > 0 || curMail.moneyType.Length > 0) { //仍有未提取的附件或钱币,无法删除? MessageBoxLogic.OpenOKBox(1135, 1000); return; } DoDeleteCurMail(); } public void DoDeleteCurMail() { MailData.UserMail curMail = _SelectedMail; if (null == curMail) { LogModule.ErrorLog("can not find cur select item"); return; } CG_MAIL_OPERATION packetDelMail = (CG_MAIL_OPERATION)PacketDistributed.CreatePacket(MessageID.PACKET_CG_MAIL_OPERATION); packetDelMail.SetOperationType((int)CG_MAIL_OPERATION.MailOperation.OPERATION_DELETE); packetDelMail.SetMailGuid(curMail.key); packetDelMail.SendPacket(); } public void ReadMail() { MailData.UserMail curMail = _SelectedMail; CG_MAIL_OPERATION packetDelMail = (CG_MAIL_OPERATION)PacketDistributed.CreatePacket(MessageID.PACKET_CG_MAIL_OPERATION); packetDelMail.SetOperationType((int)CG_MAIL_OPERATION.MailOperation.OPERATION_SETREAD); packetDelMail.SetMailGuid(curMail.key); packetDelMail.SendPacket(); } public void OnClickDelAll() { //确定要将所有已读邮件删除吗? MessageBoxLogic.OpenOKCancelBox(1137, 1000, TryDeleteAll); } public void TryDeleteAll() { DoDeleteAll(); } public void DoDeleteAll() { CG_MAIL_DELETE_ALL packetDelMail = (CG_MAIL_DELETE_ALL)PacketDistributed.CreatePacket(MessageID.PACKET_CG_MAIL_DELETE_ALL); packetDelMail.None = 1; packetDelMail.SendPacket(); } public void OnClickGetCur() { MailData.UserMail curMail = _SelectedMail; if (null == curMail) { return; } CG_MAIL_OPERATION packetDelMail = (CG_MAIL_OPERATION)PacketDistributed.CreatePacket(MessageID.PACKET_CG_MAIL_OPERATION); packetDelMail.SetOperationType((int)CG_MAIL_OPERATION.MailOperation.OPERATION_GETITEM); packetDelMail.SetMailGuid(curMail.key); packetDelMail.SendPacket(); } public void OnClickGetAll() { CG_MAIL_GETTING_ALL packetDelMail = (CG_MAIL_GETTING_ALL)PacketDistributed.CreatePacket(MessageID.PACKET_CG_MAIL_GETTING_ALL); packetDelMail.None = 1; packetDelMail.SendPacket(); } #endregion }