282 lines
8.3 KiB
C#
282 lines
8.3 KiB
C#
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<MailData.UserMail> mails = new List<MailData.UserMail>();
|
|
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<CommonItemContainerItem.ItemInfo> mailItems = new List<CommonItemContainerItem.ItemInfo>();
|
|
|
|
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
|
|
}
|