using asap.core; using game; using System.Threading.Tasks; using UnityEngine; using UniRx; using System; using System.Collections.Generic; using GameCore; 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 FeaturesUnlock featuresUnlock; public BenefitUpgrade benefitUpgrade; 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(); featuresUnlock = transform.Find("features_unlock").GetComponent(); benefitUpgrade = transform.Find("Benefit_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); featuresUnlock.gameObject.SetActive(false); benefitUpgrade.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.NormalOne: reward1.gameObject.SetActive(true); reward1.InitAsync(itemDatas); break; 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.FishBoxFly: rewardFishBox.gameObject.SetActive(true); rewardFishBox.Init(itemDatas, showData.textValue, ""); break; case RewardType.FishBoxFlyRestore: 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.exchangeItemData = null; rewardBox1.OpenDataGifts(); break; case RewardType.FeaturesUnlock: featuresUnlock.id = showData.id; featuresUnlock.gameObject.SetActive(true); featuresUnlock.ShowPanel(); break; case RewardType.BenefitUpgrade: benefitUpgrade.itemData = showData.itemDatas[0]; benefitUpgrade.gameObject.SetActive(true); benefitUpgrade.ShowPanel(); break; case RewardType.NewRod: ShowFishingAppearancePanel(itemDatas); break; case RewardType.FishCardBoxOpen: ShowRewardPopupPanel_Fishcard(itemDatas[0]); break; } } async void ShowRewardPopupPanel_Fishcard(ItemData itemData) { GameObject go = await UIManager.Instance.ShowUI(new UIType("RewardPopupPanel_Fishcard")); RewardPopupPanel_Fishcard panel_Fishcard = go.GetComponent(); panel_Fishcard.Open(itemData); } 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}"); // [REMOVED] Turntable deleted // GContext.Publish(new FishingTurnTableContinueMultiDraw()); disposable?.Dispose(); disposable = null; disposable1?.Dispose(); disposable1 = null; rewardPopupData.tcs.SetResult(true); } }