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; /// /// 邮件发送时间 /// private DateTime dSendTime; public RedPointNode RedPointNode => _redPointNode; public DataMail Cfg => mCfg; public E_MailDisplayStatus mailDisplayStatus; /// /// 邮件发送时间 /// 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); } /// /// 是否有道具,不管领没领取 /// /// public bool IsHaveItem() { if (MailData == null) return false; return MailData.Items.Count > 0; } /// /// 刷新显示相关状态 /// /// 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; } /// /// 设置邮件状态 /// /// public void SetStatus(uint stu) { if (MailSystem.MailStatus_Cliamed == Status) return; Status = stu; RefreshMailDisplayStatus(stu); EventManager.Instance.Send(EventManager.EventName.MailStateChange); } } }