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

172 lines
4.4 KiB
C#
Raw Normal View History

2023-12-11 18:56:57 +08:00
using Framework;
using Gameplay;
2023-12-25 16:48:52 +08:00
using Gameplay.Common;
2023-12-11 18:56:57 +08:00
using Gameplay.Net;
using PhxhSDK;
using System.Collections.Generic;
public class MailSystem : Singlenton<MailSystem>, IInitable
{
public List<SingleMail> DataList;
public Dictionary<ulong, SingleMail> DataDic;
public bool isHaveAll;
2023-12-12 19:35:47 +08:00
public const int MailStatus_New = 0;
public const int MailStatus_Opened = 1;
public const int MailStatus_Cliamed = 2;
2023-12-11 18:56:57 +08:00
public void Init()
{
DataList = new List<SingleMail>();
DataDic = new Dictionary<ulong, SingleMail>();
isHaveAll = false;
2023-12-25 16:48:52 +08:00
RegisterEvent();
2023-12-11 18:56:57 +08:00
}
2023-12-25 16:48:52 +08:00
private void RegisterEvent()
{
EventManager.Instance.Register(EventManager.EventName.HaveNewMail, OnHaveNewMail);
}
private void OnHaveNewMail()
{
NetHelper.RequestMailList(!MailSystem.Instance.isHaveAll);
}
private void UnregisterEvent()
{
EventManager.Instance.Unregister(EventManager.EventName.HaveNewMail, OnHaveNewMail);
2023-12-11 18:56:57 +08:00
2023-12-25 16:48:52 +08:00
}
2023-12-11 18:56:57 +08:00
public void Release()
{
2023-12-12 19:35:47 +08:00
DataList.Clear();
DataDic .Clear();
isHaveAll = false;
2023-12-25 16:48:52 +08:00
UnregisterEvent();
2023-12-11 18:56:57 +08:00
}
public void RemoveMail(ulong id)
{
SingleMail mail = null;
if (DataDic.TryGetValue(id, out mail))
{
DataDic.Remove(id);
DataList.Remove(mail);
}
else
{
DebugUtil.LogError("移除id为{0}的邮件失败",id);
}
}
public void AddMail(Mail mail)
{
SingleMail info2;
2024-01-12 13:33:12 +08:00
if (DataDic.TryGetValue(mail.Id, out info2))
2023-12-11 18:56:57 +08:00
{
2024-01-12 13:33:12 +08:00
DataDic[mail.Id].Refresh(mail);
2023-12-11 18:56:57 +08:00
for (int i = 0; i < DataList.Count; i++)
{
2024-01-12 13:33:12 +08:00
if (DataList[i].Id == mail.Id)
2023-12-11 18:56:57 +08:00
{
DataList[i].Refresh(mail);
return;
}
}
}
else
{
2023-12-25 16:48:52 +08:00
if (DataList.Count >= GLConfig.Inst.data.MaxMailCount)
{
DataList.Sort((a, b) =>
{
2024-01-19 19:13:27 +08:00
int Result = a.Status.CompareTo(b.Status);
2023-12-25 16:48:52 +08:00
if (Result == 0)
{
2024-01-22 15:38:06 +08:00
Result = b.SendTime.CompareTo(a.SendTime);
2023-12-25 16:48:52 +08:00
if (Result == 0)
{
Result = a.MailID.CompareTo(b.MailID);
}
}
return Result;
});
2024-01-19 19:13:27 +08:00
2024-01-12 13:33:12 +08:00
RemoveMail(DataList[DataList.Count - 1].Id);
2023-12-25 16:48:52 +08:00
}
SingleMail newInfo = new SingleMail(mail);
DataList.Add(newInfo);
2024-01-12 13:33:12 +08:00
DataDic[mail.Id] = newInfo;
2023-12-25 16:48:52 +08:00
MailSystem.Instance.isHaveAll = true;
2023-12-11 18:56:57 +08:00
}
}
public void SetStatus(ulong id,uint status)
{
DataDic[id].SetStatus(status);
for (int i = 0; i < DataList.Count; i++)
{
if (DataList[i].Status==status)
{
DataList[i].SetStatus(status);
return;
}
}
}
2023-12-12 19:35:47 +08:00
public void HandleIds(ulong id)
{
if(id==0)
{
for (int i = 0; i < DataList.Count; i++)
{
if ((DataList[i].Status == MailStatus_Opened) && (DataList[i].MailData!=null))
{
DataList[i].SetStatus(MailStatus_Cliamed);
2024-01-12 13:33:12 +08:00
DataDic[DataList[i].Id].SetStatus(MailStatus_Cliamed);
2023-12-12 19:35:47 +08:00
}
}
}else
{
for (int i = 0; i < DataList.Count; i++)
{
2024-01-12 13:33:12 +08:00
if (DataList[i].Id==id)
2023-12-12 19:35:47 +08:00
{
DataList[i].SetStatus(MailStatus_Cliamed);
2024-01-12 13:33:12 +08:00
DataDic[DataList[i].Id].SetStatus(MailStatus_Cliamed);
2023-12-12 19:35:47 +08:00
}
}
}
2023-12-18 19:59:06 +08:00
}
public SingleMail GetMail(uint mailID)
{
SingleMail mail = null;
if(DataDic.TryGetValue(mailID,out mail))
{
return mail;
}else
{
DebugUtil.LogError("你莫得这个Id的邮件不要找了: " + mailID);
return null;
}
2023-12-12 19:35:47 +08:00
}
2023-12-19 14:19:07 +08:00
public bool IsHaveLingQuMail()
{
for (int i = 0; i < DataList.Count; i++)
{
if (DataList[i].Status!=MailSystem.MailStatus_Cliamed)
{
return true;
}
}
return false;
}
2023-12-12 19:35:47 +08:00
2023-12-11 18:56:57 +08:00
}