NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Mail/SingleMail.cs

123 lines
3.3 KiB
C#

using cfg;
using cfg.ActorCfg;
using Framework;
using Gameplay.Net;
using NLDPB;
using System;
namespace Gameplay
{
public class SingleMail : Mail
{
private DataMail mCfg;
private RedPointNode _redPointNode;
/// <summary>
/// 邮件发送时间
/// </summary>
private DateTime dSendTime;
public RedPointNode RedPointNode => _redPointNode;
public DataMail Cfg => mCfg;
public E_MailDisplayStatus mailDisplayStatus;
/// <summary>
/// 邮件发送时间
/// </summary>
public DateTime DSendTime
{
get { return dSendTime; }
}
public enum E_MailDisplayStatus
{
NoReadAndNoItem,
NoReadAndHaveItem,
ReadAndNotClaim,
ReadAndClaim,
}
public SingleMail(Mail mail)
{
Refresh(mail);
ConstructRedPointTree();
}
public void ConstructRedPointTree()
{
_redPointNode = RedPointManager.Instance.AddDynamicNode(cfg.RedPoint.NodeType.Normal, 20, mCfg.Id);
}
public void Refresh(Mail mail)
{
mCfg = TableManager.Instance.Tables.MailCfg.GetOrDefault((int)mail.MailID);
if (mCfg == null)
{
DebugUtil.LogError($"邮件配置没有id为{mail.MailID}");
mCfg = TableManager.Instance.Tables.MailCfg.DataList[0];
}
SendTime = mail.SendTime;
Status = mail.Status;
MailID = mail.MailID;
Id = mail.Id;
Title = mail.Title;
Body = mail.Body;
dSendTime = CommonUtils.GetTimeByTimestamp(mail.SendTime);
if (mail.MailData != null)
MailData = mail.MailData;
RefreshMailDisplayStatus(mail.Status);
}
/// <summary>
/// 是否有道具,不管领没领取
/// </summary>
/// <returns></returns>
public bool IsHaveItem()
{
if (MailData == null)
return false;
return MailData.Items.Count > 0;
}
/// <summary>
/// 刷新显示相关状态
/// </summary>
/// <param name="status"></param>
public void RefreshMailDisplayStatus(uint status)
{
if ((uint)MailStatus.New == status)
mailDisplayStatus = IsHaveItem() ? E_MailDisplayStatus.NoReadAndHaveItem : E_MailDisplayStatus.NoReadAndNoItem;
else if ((uint)MailStatus.Opened == status)
{
if (MailData != null)
mailDisplayStatus = IsHaveItem() ? E_MailDisplayStatus.ReadAndNotClaim : E_MailDisplayStatus.ReadAndClaim;
else
mailDisplayStatus = E_MailDisplayStatus.ReadAndClaim;
}
else
mailDisplayStatus = E_MailDisplayStatus.ReadAndClaim;
}
/// <summary>
/// 设置邮件状态
/// </summary>
/// <param name="stu"></param>
public void SetStatus(uint stu)
{
if (MailSystem.MailStatus_Cliamed == Status)
return;
Status = stu;
RefreshMailDisplayStatus(stu);
EventManager.Instance.Send(EventManager.EventName.MailStateChange);
}
}
}