using cfg; using cfg.ActorCfg; using Framework; using Gameplay.Common; using Gameplay.Net; using NLDPB; using System; namespace Gameplay { /// /// 邮件信息 /// public class MailInfo { /// /// 实例id /// private ulong id; /// /// 邮件模板配置数据 /// private DataMail mCfg; /// /// 邮件服务器数据 /// private Mail mailServer; /// /// 邮件发送时间 /// private DateTime sendTime; /// /// 到期时间 /// private DateTime overTime; /// /// 邮件逻辑状态 /// private MailStatus mailStatus; /// /// 显示状态 /// private E_MailDisplayStatus displayStatus; /// /// 红点节点 /// private RedPointNode _redPointNode; #region 属性 public ulong Id { get { return id; } } /// /// 邮件状态 /// public MailStatus EStatus { get { return mailStatus; } } /// /// 邮件发送时间 /// public DateTime SendTime { get { return sendTime; } } /// /// 到期时间 /// public DateTime OverTime { get { return overTime; } } /// /// 配置数据 /// public DataMail Cfg { get { return mCfg; } } public Mail MailServer { get { return mailServer; } } /// /// 显示状态 /// public E_MailDisplayStatus DisplayStatus { get { return displayStatus; } } /// /// 邮件是否附带道具 /// public bool IsHaveItem { get { if (mailServer.MailData == null) return false; return mailServer.MailData.Items.Count > 0; } } /// /// 是否可以领取 /// public bool IsHaveClaim { get { if (displayStatus == E_MailDisplayStatus.ReadAndNotClaim) return true; if (displayStatus == E_MailDisplayStatus.NoReadAndHaveItem) return true; return false; } } /// /// 是否领取过邮件奖励 /// public bool IsGetClaim { get { return EStatus == MailStatus.Cliamed; } } /// /// 红点节点 /// public RedPointNode RedPointNode { get { return _redPointNode; } } #endregion public MailInfo(Mail mail) { Refresh(mail); _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]; } id = mail.Id; mailServer = mail; mailStatus = (MailStatus)mail.Status; sendTime = CommonUtils.GetTimeByTimestamp(mail.SendTime); overTime = sendTime.AddDays(GLConfig.Inst.data.MailDays); RefreshMailDisplayStatus(mailStatus); } /// /// 设置邮件逻辑状态 /// /// public void SetStatus(MailStatus status) { if (status == mailStatus) return; mailStatus = status; RefreshMailDisplayStatus(mailStatus); EventManager.Instance.Send(EventManager.EventName.MailStateChange); } /// /// 刷新显示相关状态 /// /// private void RefreshMailDisplayStatus(MailStatus mailStatus) { if (MailStatus.New == mailStatus) { displayStatus = IsHaveItem ? E_MailDisplayStatus.NoReadAndHaveItem : E_MailDisplayStatus.NoReadAndNoItem; return; } if (MailStatus.Opened == mailStatus) { displayStatus = IsHaveItem ? E_MailDisplayStatus.ReadAndNotClaim : E_MailDisplayStatus.ReadAndClaim; return; } displayStatus = E_MailDisplayStatus.ReadAndClaim; } } /// /// 邮件显示状态 /// public enum E_MailDisplayStatus { /// /// 没有读取也没有道具 /// NoReadAndNoItem, /// /// 没有读取但是有道具 /// NoReadAndHaveItem, /// /// 读取但是没有领取 /// ReadAndNotClaim, /// /// 读取并领取 /// ReadAndClaim, } }