/// #pkgName FGUI包名
/// #panelName UIPanel名字
/// #UIName = $"{#pkgName}{#panelName}" UIKey名字
/// 该脚本由模板创建
/// created by cb 2024
using FairyGUI;
using FL.Data;
using FL.Data.Items;
using FL.Network;
using System.Collections.Generic;
using XGame.Database;
using XGame.Framework.UI;
namespace FL.FGUI
{
public struct IMailRwdItem
{
public IItemBase Item;
public bool IsGet;
}
///
/// UI逻辑处理类
///
///
public partial class MailMailPanelCtrl : UIController
{
private List _mailList = new List();
private List _mailRwdList;
private bool _isOpenMail;// 是否打开单封邮件
private string _mailId;// 当前打开的邮件id
protected override void OnEnable(object intent)
{
AddUIListenres();
Init();
_isOpenMail = false;
ShowUI();
}
protected override void OnDisable()
{
RemoveUIListenres();
}
#region UI事件
private void AddUIListenres()
{
VM.AllReadBtn.onClick.Add(OnClickAllReadBtn);
VM.DeleteReadBtn.onClick.Add(OnClickDeleteReadBtn);
VM.BackMainBtn.onClick.Add(OnClickBackMainBtn);
VM.AllGetBtn.onClick.Add(OnClickAllGetBtn);
VM.ReadBtn.onClick.Add(OnClickReadBtn);
VM.GetBtn.onClick.Add(OnClickGetBtn);
VM.DeleteBtn.onClick.Add(OnClickDeleteBtn);
Context.AddListener(EventDefine.UpMailList, UpMailList);
VM.MailList.ItemClickEvent += OnClcikMailListItem;
}
private void RemoveUIListenres()
{
VM.AllReadBtn.onClick.Remove(OnClickAllReadBtn);
VM.DeleteReadBtn.onClick.Remove(OnClickDeleteReadBtn);
VM.BackMainBtn.onClick.Remove(OnClickBackMainBtn);
VM.AllGetBtn.onClick.Remove(OnClickAllGetBtn);
VM.ReadBtn.onClick.Remove(OnClickReadBtn);
VM.GetBtn.onClick.Remove(OnClickGetBtn);
VM.DeleteBtn.onClick.Remove(OnClickDeleteBtn);
Context.RemoveListener(EventDefine.UpMailList, UpMailList);
VM.MailList.ItemClickEvent -= OnClcikMailListItem;
}
private void Init()
{
if (_mailList == null) _mailList = new List();
if (_mailRwdList == null) _mailRwdList = new List();
}
private void ShowUI()
{
bool canGet = false;
bool canRead = false;
_mailList.Clear();
MailInfo mailInfo = null;
foreach (var mail in MailData.Instance.mailInfo)
{
if (mail.Value.rts <= 0)
{
if (mail.Value.items.Count > 0)
{
canGet = true;
}
else
{
canRead = true;
}
}
if (_isOpenMail && _mailId == mail.Value.id)
{
mailInfo = mail.Value;
}
long nowTime = Context.Time.GetNowTime() / 1000;
if (mail.Value.ets >= nowTime)
{
_mailList.Add(mail.Value);
}
}
VM.AllReadBtn.visible = !_isOpenMail && canRead;// 一键已读
VM.DeleteReadBtn.visible = !_isOpenMail && !canRead;// 删除已读
VM.AllGetBtn.visible = !_isOpenMail;// 全部领取
VM.AllGetBtn.enabled = canGet;// 全部领取
VM.MailDetailsGrp.visible = _isOpenMail && mailInfo != null;// 是否打开单封邮件
VM.MailList.visible = !VM.MailDetailsGrp.visible;// 邮件列表隐藏
if (_isOpenMail && mailInfo != null)
{
VM.BackMainBtn.visible = _isOpenMail;// 返回邮件列表
bool hasItem = mailInfo.items.Count > 0;
bool singleCanGet = mailInfo.rts <= 0 && hasItem;
bool singleCanRead = mailInfo.rts <= 0 && !hasItem;
VM.ReadBtn.visible = _isOpenMail && singleCanRead;// 已读
VM.GetBtn.visible = _isOpenMail && singleCanGet;// 领取
VM.DeleteBtn.visible = _isOpenMail && !singleCanGet && !singleCanRead;// 删除
VM.TitleLabel.text = mailInfo.title;
VM.TimeLabel.text = mailInfo.ets.ToTimeYMDHM();
VM.ContentLabel.text = mailInfo.content;
VM.ItemGrp.visible = hasItem;
if (hasItem)
{
_mailRwdList.Clear();
for (int i = 0; i < mailInfo.items.Count; i++)
{
IMailRwdItem mailRwdItem = new IMailRwdItem()
{
Item = ItemService.Instance.GetItemBase(mailInfo.items[i].id, mailInfo.items[i].count, mailInfo.items[i].kind),
IsGet = mailInfo.rts > 0,
};
_mailRwdList.Add(mailRwdItem);
}
ShowItemsUI(_mailRwdList);
}
}
SetMailList(_mailList);
}
// 打开单封邮件
private void OpenSingleMail(string mailId)
{
_isOpenMail = true;
_mailId = mailId;
ShowUI();
}
//刷新邮件列表
private void UpMailList(int eventId, object args)
{
ShowUI();
}
//刷新邮件列表
private void SetMailList(List dataList)
{
VM.MailList.BindDatas(dataList);
UpMailCount(dataList.Count);
VM.EmptyLabel.visible = dataList.Count == 0;
}
// 邮件数量
private void UpMailCount(int num)
{
VM.MailCountLabel.text = string.Format(StringDefine.MailCountLabel, num, KeyValue.mailMax);
}
//单封邮件内的奖励
private void ShowItemsUI(List dataList)
{
VM.ItemList.BindDatas(dataList);
}
//点击邮件列表
private void OnClcikMailListItem(int index)
{
string mailId = _mailList[index].id;
OpenSingleMail(mailId);
}
//一键已读
private void OnClickAllReadBtn(EventContext context)
{
MailService.Instance.RequestMailReadAll();
}
//删除已读
private void OnClickDeleteReadBtn(EventContext context)
{
MailService.Instance.RequestMailDelAll();
}
//返回
private void OnClickBackMainBtn(EventContext context)
{
_isOpenMail = false;
ShowUI();
}
//一键领取
private void OnClickAllGetBtn(EventContext context)
{
MailService.Instance.RequestMailRwdAll();
}
//已读
private void OnClickReadBtn(EventContext context)
{
MailService.Instance.RequestMailRwd(_mailId);
}
//领取
private void OnClickGetBtn(EventContext context)
{
MailService.Instance.RequestMailRwd(_mailId);
}
//删除
private void OnClickDeleteBtn(EventContext context)
{
_isOpenMail = false;
VM.MailDetailsGrp.visible = false;
VM.MailList.visible = true;
MailService.Instance.RequestMailDel(_mailId);
}
#endregion
}
}