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,
}
}