Files
JJBB/Assets/Project/Script/GUI/FriendAndMail/MailRootLogic.cs
2024-08-23 15:49:34 +08:00

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
}