using asap.core; using game; using System.Threading.Tasks; using UnityEngine; using UniRx; using System; using System.Collections.Generic; using GameCore; using TMPro; public class RewardPopupData { public string panelName; public bool isShow; public TaskCompletionSource tcs; } public struct MaskFadeAlpha { } public class RewardPopupPanel : MonoBehaviour { CanvasGroup canvasGroup; public float maskAlpha = 0.3f; //遮罩透明度 public CanvasGroup maskCanvasGroup; public RewardNormal reward; public RewardNormal1 reward1; public RewardFishBox rewardFishBox; public RewardFishBoxOpen rewardFishBoxOpen; public RewardBox rewardBox1; public RewardAlbumComplete rewardAlbumComplete; public RewardAlbumAllComplete rewardAlbumAllComplete; public FeaturesUnlock featuresUnlock; public BenefitUpgrade benefitUpgrade; public RewardFishCardUpgrade rewardFishCardUpgrade; List rewardItems; Transform reward_group; RewardPopupData rewardPopupData; IDisposable disposable; IDisposable disposable1; RewardType rewardType; private void Awake() { reward_group = transform.Find("reward_group"); rewardItems = new List(); for (int i = 0; i < 9; i++) { rewardItems.Add(reward_group.GetChild(i).GetComponent()); } rewardPopupData = new RewardPopupData(); rewardPopupData.tcs = new TaskCompletionSource(); canvasGroup = GetComponent(); reward = transform.Find("reward").GetComponent(); reward1 = transform.Find("reward_1").GetComponent(); rewardBox1 = transform.Find("reward_box1").GetComponent(); rewardFishBox = transform.Find("reward_show_1").GetComponent(); rewardFishBoxOpen = transform.Find("reward_box_open").GetComponent(); rewardAlbumComplete = transform.Find("album_complete").GetComponent(); rewardAlbumAllComplete = transform.Find("album_all_complete").GetComponent(); featuresUnlock = transform.Find("features_unlock").GetComponent(); benefitUpgrade = transform.Find("Benefit_upgrade").GetComponent(); rewardFishCardUpgrade = transform.Find("reward_fishcard_upgrade").GetComponent(); disposable = GContext.OnEvent().Subscribe(OnRewardPopupData); disposable1 = GContext.OnEvent().Subscribe(x => { CheckMaskFadeAlpha(); }); } void OnRewardPopupData(RewardPopupData data) { data.isShow = enabled; data.tcs = rewardPopupData.tcs; } private void OnEnable() { Init(); } public void Init() { bool isAutoClose = rewardType == RewardType.AutoOpen; canvasGroup.alpha = DeBugPanel.isShow ? 1 : 0; canvasGroup.blocksRaycasts = true; reward.gameObject.SetActive(false); reward1.gameObject.SetActive(false); SetAutoClose(isAutoClose); rewardFishBox.gameObject.SetActive(false); rewardFishBoxOpen.gameObject.SetActive(false); rewardBox1.gameObject.SetActive(false); rewardAlbumComplete.gameObject.SetActive(false); rewardAlbumAllComplete.gameObject.SetActive(false); featuresUnlock.gameObject.SetActive(false); benefitUpgrade.gameObject.SetActive(false); rewardFishCardUpgrade.gameObject.SetActive(false); } void SetAutoClose(bool isAutoClose) { reward.isAutoClose = isAutoClose; reward1.isAutoClose = isAutoClose; rewardFishBox.isAutoClose = isAutoClose; rewardBox1.isAutoClose = isAutoClose; } ExchangeItemData GetExchangeItemData(ExchangeItemData exchangeItemData) { if (exchangeItemData == null) { return null; } if (exchangeItemData.exchangeCount > 0) { return exchangeItemData; } else { return GetExchangeItemData(exchangeItemData.nextExchangeItemData); } } public void ShowPanel(ShowData showData, string textValue, RewardType rewardType) { this.rewardType = rewardType; Init(); List itemDatas = null; //有些弹窗需要展示物品 itemDatas 有些不需要 比如 FeaturesUnlock itemDatas可为空 if (showData.itemDatas != null) { //转换物品链处理 itemDatas = new List(showData.itemDatas); for (int i = 0; i < itemDatas.Count; i++) { ItemData itemData = itemDatas[i]; ExchangeItemData nextExchangeItemData = GetExchangeItemData(itemData.exchangeItemData); itemData.exchangeItemData = nextExchangeItemData; if (nextExchangeItemData != null) { ExchangeItemData exchangeItemData = GetExchangeItemData(nextExchangeItemData.nextExchangeItemData); nextExchangeItemData.nextExchangeItemData = null; if (exchangeItemData != null) { ItemData itemData1 = new ItemData(); itemData1.id = itemData.id; itemData1.curCount = itemData.curCount; itemData1.count = itemData.count; itemData1.exchangeItemData = exchangeItemData; itemDatas.Insert(i + 1, itemData1); } } } } bool guide = GContext.container.Resolve().InspectTriggerGuide("RewardPopupPanel"); //if (guide) //{ // SetAutoClose(false); //} switch (showData.rewardType) { //case RewardType.NormalOneRestore: // reward1.gameObject.SetActive(true); // reward1.InitRestore(itemDatas); // break; case RewardType.NormalOne: reward1.gameObject.SetActive(true); reward1.InitAsync(itemDatas); break; case RewardType.NormalOneRestore: case RewardType.NormalRestore: reward.gameObject.SetActive(true); reward.InitRestore(itemDatas); break; case RewardType.Normal: reward.gameObject.SetActive(true); reward.InitAsync(itemDatas, textValue); break; case RewardType.FishBox: rewardFishBox.isFly = false; rewardFishBox.gameObject.SetActive(true); rewardFishBox.Init(itemDatas, showData.textValue, ""); break; case RewardType.FishBoxFly: rewardFishBox.isFly = true; rewardFishBox.gameObject.SetActive(true); rewardFishBox.Init(itemDatas, showData.textValue, ""); break; case RewardType.FishBoxFlyRestore: rewardFishBox.isFly = true; rewardFishBox.gameObject.SetActive(true); rewardFishBox.Init(itemDatas, showData.textValue, LocalizationMgr.GetText("UI_FishingRewardPanel_101041")); break; case RewardType.FishBoxOpen: rewardFishBoxOpen.gameObject.SetActive(true); rewardFishBoxOpen.Init(itemDatas); break; case RewardType.CardHolder: rewardBox1.itemDataGifts = showData.itemDataGifts; rewardBox1.exchangeItemData = null; rewardBox1.Show(); break; case RewardType.CollectionAlbum: if (showData.id == 0) { rewardAlbumAllComplete.gameObject.SetActive(true); rewardAlbumAllComplete.itemDatas = itemDatas; rewardAlbumAllComplete.Show(rewardItems); } else { rewardAlbumComplete.gameObject.SetActive(true); rewardAlbumComplete.itemDatas = itemDatas; rewardAlbumComplete.Show(showData.id, rewardItems); } break; case RewardType.FeaturesUnlock: featuresUnlock.id = showData.id; featuresUnlock.gameObject.SetActive(true); break; case RewardType.BenefitUpgrade: benefitUpgrade.itemData = showData.itemDatas[0]; benefitUpgrade.gameObject.SetActive(true); break; case RewardType.FishCardUpgrade: rewardFishCardUpgrade.InitAsync(showData.id); break; case RewardType.NewRod: ShowFishingAppearancePanel(itemDatas); break; } } async void ShowFishingAppearancePanel(List itemDatas) { GameObject go = await UIManager.Instance.ShowUILoad(UITypes.FishingAppearancePanel); FishingAppearancePanel fishingAppearance = go.GetComponent(); fishingAppearance.ShowNewRod(itemDatas); } public void CheckMaskFadeAlpha() { maskCanvasGroup.DOFadeAlpha(maskAlpha, 1); } private void OnDestroy() { // Debug.Log($"[turntable] Current thread ID @ OnRewardPopupPanelDestroy: {System.Threading.Thread.CurrentThread.ManagedThreadId}"); GContext.Publish(new FishingTurnTableContinueMultiDraw()); GContext.Publish(new FishingChallengeContinueEvent()); disposable?.Dispose(); disposable = null; disposable1?.Dispose(); disposable1 = null; rewardPopupData.tcs.SetResult(true); } }