using Assets.Framework.Tool; using Assets.MyGame.Scripts.Net; using Assets.MyGame.Scripts.Net.APIRequest.Params; using Assets.MyGame.Scripts.Net.APIResponses.HomeMain_User; using System.Collections; using System.Collections.Generic; using System.Linq; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; public class UIHome_BY_EmailPanel : SubUIBase { public GameObject obj_ShowEmail; public TextMeshProUGUI tMPText_Header; public TextMeshProUGUI tMPText_Content; public TextMeshProUGUI tMPText_EmailCount; public Button btn_Receive; public Button btn_Dlete; public Button btn_AllDlete; public Button btn_AllReceive; public EmalItem itemPrefab; public Transform itemPrefabParent; public GameObject propPrefab; public Transform propPrefabParent; public string currEmailID; public Dictionary dic_GetEmailByPageResponses = new Dictionary(); public Dictionary dic_EmalItems = new Dictionary(); public override void Awake() { base.Awake(); GameManager.Instance.OnUserDataChanged += RefreshUI; btn_Receive.onClick.AddListener(() => { APIRequestList.RewardEmail(new RewardEmailParam { id=currEmailID, type=1 }, (str) => { UIManager.Instance.ShowBoardError("领取成功"); // 弹出获得面板 if (dic_GetEmailByPageResponses.TryGetValue(currEmailID, out var email)) { var dataList = BuildRewardDataList(email); if (dataList.Count > 0) UIManager.Instance.ShowHuoDe(dataList); } RewardEmail(currEmailID); // 领取后刷新用户数据 var userId = GameManager.Instance?.user?.id; if (!string.IsNullOrEmpty(userId)) APIRequestList.GetUser(userId, a => GameManager.Instance.UpdataUserData(a)); }); }); btn_AllReceive.onClick.AddListener(() => { APIRequestList.RewardEmail(new RewardEmailParam { id = "", type = 2 }, (str) => { UIManager.Instance.ShowBoardError("领取成功"); // 合并所有可领取邮件的奖励并弹出获得面板 var dataList = new List(); foreach (var kvp in dic_GetEmailByPageResponses) { if (kvp.Value.isReward) continue; // 已领取的跳过 dataList.AddRange(BuildRewardDataList(kvp.Value)); } if (dataList.Count > 0) UIManager.Instance.ShowHuoDe(dataList); foreach (var item in dic_EmalItems.Keys) { RewardEmail(item); } //for (int i = 0; i < propPrefabParent.childCount; i++) //{ // propPrefabParent.GetChild(i).GetChild(1).gameObject.SetActive(true); //} }); }); btn_Dlete.onClick.AddListener(() => { APIRequestList.DeleteEmail(new DeleteEmailParam { id = currEmailID, type = 1 }, (str) => { UIManager.Instance.ShowBoardError("删除成功"); dic_GetEmailByPageResponses.Remove(currEmailID); ; Destroy(dic_EmalItems[currEmailID].gameObject); dic_EmalItems.Remove(currEmailID); if (dic_EmalItems.Count == 0) { obj_ShowEmail.SetActive(false); } else { obj_ShowEmail.SetActive(true); } tMPText_EmailCount.text = itemPrefabParent.childCount.ToString(); }); }); btn_AllDlete.onClick.AddListener(() => { APIRequestList.DeleteEmail(new DeleteEmailParam { id = "", type = 2 }, (str) => { UIManager.Instance.ShowBoardError("删除成功"); foreach (var item in dic_EmalItems.Keys.ToList()) { if (dic_GetEmailByPageResponses[item].rewardItems !=null&& dic_GetEmailByPageResponses[item].rewardItems.Count > 0|| dic_GetEmailByPageResponses[item].rewardGold>0|| dic_GetEmailByPageResponses[item].rewardDiamond>0) { if (dic_GetEmailByPageResponses[item].isReward == true) { Destroy(dic_EmalItems[item].gameObject); dic_GetEmailByPageResponses.Remove(item); dic_EmalItems.Remove(item); } } else { if (dic_GetEmailByPageResponses[item].isRead == true) { Destroy(dic_EmalItems[item].gameObject); dic_GetEmailByPageResponses.Remove(item); dic_EmalItems.Remove(item); } } } tMPText_EmailCount.text = itemPrefabParent.childCount.ToString(); if (dic_EmalItems.Count == 0) { obj_ShowEmail.SetActive(false); } else { obj_ShowEmail.SetActive(true); } }); }); } private void RewardEmail(string key) { dic_GetEmailByPageResponses[key].isReward = true; dic_EmalItems[key].obj_LingQu.SetActive(true); btn_Receive.gameObject.SetActive(false); btn_Dlete.gameObject.SetActive(true); for (int i = 0; i < propPrefabParent.childCount; i++) { propPrefabParent.GetChild(i).GetChild(1).gameObject.SetActive(true); } } /// /// 从单封邮件的奖励数据构建 BackPackPropItemData 列表(金币/钻石/道具)。 /// 数量为 0 的不加入列表。 /// private List BuildRewardDataList(GetEmailByPageResponse email) { var list = new List(); if (email == null) return list; if (email.rewardGold > 0) { list.Add(new BackPackPropItemData { giftType = 1, count = (int)email.rewardGold }); } if (email.rewardDiamond > 0) { list.Add(new BackPackPropItemData { giftType = 2, count = email.rewardDiamond }); } if (email.rewardItems != null) { foreach (var prop in email.rewardItems) { if (prop == null) continue; list.Add(new BackPackPropItemData { giftType = 3, url = APIManager.baseURL + prop.imageUrl, count = prop.count, }); } } return list; } protected override void OnShow(object args = null) { base.OnShow(args); foreach (var item in dic_EmalItems.Values) { Destroy(item.gameObject); } dic_GetEmailByPageResponses.Clear(); dic_EmalItems.Clear(); if (args != null) { List getEmailByPageResponse = (List)args; if (getEmailByPageResponse.Count==0) { obj_ShowEmail.SetActive(false); } else { obj_ShowEmail.SetActive(true); } foreach (var item in getEmailByPageResponse) { dic_GetEmailByPageResponses[item.id] = item; var emailItem = Instantiate(itemPrefab.gameObject, itemPrefabParent).GetComponent(); emailItem.Init(this, item.title, item.sendTime, item.isReward,item.isRead); dic_EmalItems[item.id] = emailItem; emailItem.GetComponent().onValueChanged.AddListener((a) => { if (a) { currEmailID = item.id; tMPText_Header.text = item.title; tMPText_Content.text = item.content; APIRequestList.GetEmail(new GetEmailParam { id = currEmailID, }, (GetEmailByPageResponse) => { dic_EmalItems[ GetEmailByPageResponse.id].obj_YiDu.SetActive(false); dic_GetEmailByPageResponses[ GetEmailByPageResponse.id].isRead=(true); }); for (int i = propPrefabParent.childCount; i > 0; i--) { Destroy(propPrefabParent.GetChild(i-1).gameObject); } if (item.rewardGold>0) { GameObject obj = Instantiate(propPrefab, propPrefabParent); ResourceRequest request = Resources.LoadAsync("gold"); request.completed += (op) => { if (op is ResourceRequest req && req.asset is Sprite sprite) { obj.transform.GetChild(0).GetComponent().sprite = sprite; } else { Debug.LogError("加载失败: "); } }; //Addressables.LoadAssetAsync("Assets/UIResources/Home/邮件/图层 2311.png").Completed+=(AsyncOperationHandle op) => //{ // if (op.Status==AsyncOperationStatus.Succeeded) // { // obj.transform.GetChild(0).GetComponent().sprite = op.Result; // } // else // { // Debug.LogError("加载失败: " + op.OperationException); // } //}; obj.transform.GetChild(0).GetChild(0).GetComponent().text = item.rewardGold.ToString(); if (item.isReward) { obj.transform.GetChild(1).gameObject.SetActive(true); btn_Dlete.gameObject.SetActive(true); btn_Receive.gameObject.SetActive(false); } else { btn_Dlete.gameObject.SetActive(false); btn_Receive.gameObject.SetActive(true); } } if (item.rewardDiamond>0) { GameObject obj = Instantiate(propPrefab, propPrefabParent); ResourceRequest request = Resources.LoadAsync("diamond"); request.completed += (op) => { if (op is ResourceRequest req && req.asset is Sprite sprite) { obj.transform.GetChild(0).GetComponent().sprite = sprite; } else { Debug.LogError("加载失败: "); } }; //Addressables.LoadAssetAsync("Assets/UIResources/Home/邮件/图层 2314.png").Completed += (AsyncOperationHandle op) => //{ // if (op.Status == AsyncOperationStatus.Succeeded) // { // obj.transform.GetChild(0).GetComponent().sprite = op.Result; // } // else // { // Debug.LogError("加载失败: " + op.OperationException); // } //}; obj.transform.GetChild(0).GetChild(0).GetComponent().text = item.rewardDiamond.ToString(); if (item.isReward) { obj.transform.GetChild(1).gameObject.SetActive(true); btn_Dlete.gameObject.SetActive(true); btn_Receive.gameObject.SetActive(false); } else { btn_Dlete.gameObject.SetActive(false); btn_Receive.gameObject.SetActive(true); } } if (item.rewardItems.Count>0) { foreach (var prop in item.rewardItems) { GameObject obj = Instantiate(propPrefab, propPrefabParent); WebTool.DownImage(APIManager.baseURL+ prop.imageUrl, (texture) => { obj.transform.GetChild(0).GetComponent().sprite = Sprite.Create(texture,new Rect(0f,0f,texture.width,texture.height),Vector2.one*0.5f); }); obj.transform.GetChild(0).GetChild(0).GetComponent().text = prop.count.ToString(); if (item.isReward) { obj.transform.GetChild(1).gameObject.SetActive(true); btn_Dlete.gameObject.SetActive(true); btn_Receive.gameObject.SetActive(false); } else { btn_Dlete.gameObject.SetActive(false); btn_Receive.gameObject.SetActive(true); } } } } }); } tMPText_EmailCount.text=itemPrefabParent.childCount.ToString(); } else { obj_ShowEmail.SetActive(false); } } private void RefreshUI() { // 邮件面板没有直接的金币/钻石文本,刷新由领取后 GetUser + UpdataUserData 触发 // 其他订阅 OnUserDataChanged 的面板(主界面、商店、背包等)会自动更新 } }