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

235 lines
5.7 KiB
C#

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