Files
back_cantanBuilding/Assets/Scripts/UI/Mail/FishingMailInfoPopupPanel.cs
2026-05-26 16:15:54 +08:00

115 lines
3.6 KiB
C#

using System;
using System.Linq;
using asap.core;
using GameCore;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class FishingMailInfoPopupPanel : MonoBehaviour
{
Button btn_close;
Button btn_mask;
TMP_Text text_title;
TMP_Text text_content;
TMP_Text text_end;
RewardItemNew[] rewardSlot;
Button btn_receive;
Button btn_delete;
GameMail _mail;
IInGameMailService _mailService;
[SerializeField]
private RectTransform mailBody;
[SerializeField]
private RectTransform rewardRect;
private PlayerItemData _playerItemData;
private void Awake()
{
btn_close = transform.Find("btn_close").GetComponent<Button>();
btn_mask = transform.Find("mask").GetComponent<Button>();
text_title = transform.Find("root/text_title").GetComponent<TMP_Text>();
text_content = transform.Find("root/ScrollView/Viewport/Content/text_content").GetComponent<TMP_Text>();
text_end = transform.Find("root/ScrollView/Viewport/Content/text_end").GetComponent<TMP_Text>();
rewardSlot = transform.Find("root/reward").GetComponentsInChildren<RewardItemNew>();
btn_receive = transform.Find("root/btn_receive/btn_green").GetComponent<Button>();
btn_delete = transform.Find("root/btn_delete/btn_green").GetComponent<Button>();
_mailService=GContext.container.Resolve<IInGameMailService>();
_playerItemData = GContext.container.Resolve<PlayerItemData>();
}
private void Start()
{
btn_close.onClick.AddListener(OnClickClose);
btn_mask.onClick.AddListener(OnClickClose);
btn_receive.onClick.AddListener(OnClickReceive);
btn_delete.onClick.AddListener(OnClickDelete);
}
private Action refreshMailList;
public void SetData(GameMail mail, Action refreshMailList)
{
this.refreshMailList = refreshMailList;
_mail = mail;
text_title.text = _mail.Title;
text_content.text = _mail.Content;
text_end.text = _mail.From;
for ( int i = 0; i < rewardSlot.Length; i++ )
{
rewardSlot[i].gameObject.SetActive(false);
}
if (mail.HasDrops)
{
// var rewardItems = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropId(mail.DropIds[0]);
var rewardItems = _playerItemData.GetItemDataByDropList(mail.DropIds.ToList());
for ( int i = 0; i < rewardSlot.Length; i++ )
{
if ( i < rewardItems.Count )
{
rewardSlot[i].SetData(rewardItems[i]);
}
}
}
else
{
var mailBodySize = new Vector2(mailBody.rect.width, mailBody.rect.height + rewardRect.rect.height);
mailBody.sizeDelta = mailBodySize;
rewardRect.gameObject.SetActive(false);
}
SetState();
}
private void SetState()
{
btn_delete.transform.parent.gameObject.SetActive(_mail.HasReward);
btn_receive.transform.parent.gameObject.SetActive(!_mail.HasReward);
}
private async void OnClickDelete()
{
if (await _mailService.DelMail(_mail))
{
OnClickClose();
}
}
private async void OnClickReceive()
{
UIManager.ShowWaitingBlock("FishingMailInfoPopupPanel::OnClickReceive");
if (await _mailService.TakeReward(_mail))
{
SetState();
}
UIManager.HideWaitingBlock("FishingMailInfoPopupPanel::OnClickReceive");
}
void OnClickClose()
{
refreshMailList?.Invoke();
UIManager.Instance.DestroyUI(UITypes.FishingMailInfoPopupPanel);
}
}