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

176 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Framework;
using Gameplay;
using Gameplay.Common;
using Gameplay.Net;
using NLDPB;
using PhxhSDK;
using System.Collections.Generic;
public class MailSystem : Singlenton<MailSystem>, IInitable
{
/// <summary>
/// 邮件数据字典
/// </summary>
public Dictionary<ulong, MailInfo> DicMail;
/// <summary>
/// 是否有全部邮件
/// </summary>
public bool isHaveAll;
public void Init()
{
DicMail = new Dictionary<ulong, MailInfo>();
isHaveAll = false;
EventManager.Instance.Register(EventManager.EventName.HaveNewMail, OnHaveNewMail);
}
public void Release()
{
EventManager.Instance.Unregister(EventManager.EventName.HaveNewMail, OnHaveNewMail);
isHaveAll = false;
DicMail.Clear();
}
/// <summary>
/// 收到MailInfo的Message表示有新邮件需要更新
/// </summary>
private void OnHaveNewMail()
{
NetHelper.RequestMailList(!Instance.isHaveAll);
}
public void RemoveMail(ulong id)
{
if (!DicMail.Remove(id))
DebugUtil.LogError($"移除id为{id}的邮件失败");
}
/// <summary>
/// 添加邮件
/// </summary>
/// <param name="mail"></param>
public void AddMail(Mail mail)
{
if (DicMail.TryGetValue(mail.Id, out MailInfo mailInfo))
mailInfo.Refresh(mail);
else
{
if (DicMail.Count >= GLConfig.Inst.data.MaxMailCount)
{
MailInfo delectMail = null; // 待删除的邮件信息
foreach (MailInfo temp in DicMail.Values)
{
if (delectMail == temp)
delectMail = temp;
if (temp.EStatus < delectMail.EStatus)
continue;
if (temp.EStatus > delectMail.EStatus)
{
delectMail = temp;
continue;
}
if (delectMail.SendTime < temp.SendTime)
continue;
if (delectMail.SendTime > temp.SendTime)
{
delectMail = temp;
continue;
}
if (temp.Cfg.Id < delectMail.Cfg.Id)
continue;
if (temp.Cfg.Id > delectMail.Cfg.Id)
{
delectMail = temp;
continue;
}
}
if (delectMail != null)
RemoveMail(delectMail.Id);
}
DicMail[mail.Id] = new(mail);
Instance.isHaveAll = true;
}
}
/// <summary>
/// 设置邮件逻辑状态
/// </summary>
/// <param name="id"></param>
/// <param name="status"></param>
public void SetStatus(ulong id, MailStatus status)
{
if (DicMail.TryGetValue(id, out MailInfo singleMail))
singleMail.SetStatus(status);
}
public void HandleIds(ulong id)
{
if (id == 0) // 全部已领取
{
foreach (MailInfo singleMail in DicMail.Values)
{
singleMail.SetStatus(MailStatus.Cliamed);
}
}
else
SetStatus(id, MailStatus.Cliamed);
}
public MailInfo GetMail(uint mailID)
{
if (DicMail.TryGetValue(mailID, out MailInfo mail))
return mail;
else
{
DebugUtil.LogError($"你莫得Id为{mailID}的邮件,不要找了");
return null;
}
}
/// <summary>
/// 是否有可以领取的邮件
/// </summary>
/// <returns></returns>
public bool IsHaveGetMail()
{
foreach (MailInfo mailInfo in DicMail.Values)
{
if(mailInfo.IsHaveClaim)
return true;
}
return false;
}
/// <summary>
/// 清理所有到期邮件
/// </summary>
public void ClearOverTime()
{
List<ulong> listDelId = new();
foreach (MailInfo mailInfo in DicMail.Values)
{
if (mailInfo.OverTime <= CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server))
listDelId.Add(mailInfo.Id);
}
foreach (ulong id in listDelId)
{
Instance.RemoveMail(id);
NetHelper.DeleteMail(id);
}
}
}