Files
2026-05-26 16:15:54 +08:00

272 lines
9.8 KiB
C#

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<bool> 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<RewardItemNew> rewardItems;
Transform reward_group;
RewardPopupData rewardPopupData;
IDisposable disposable;
IDisposable disposable1;
RewardType rewardType;
private void Awake()
{
reward_group = transform.Find("reward_group");
rewardItems = new List<RewardItemNew>();
for (int i = 0; i < 9; i++)
{
rewardItems.Add(reward_group.GetChild(i).GetComponent<RewardItemNew>());
}
rewardPopupData = new RewardPopupData();
rewardPopupData.tcs = new TaskCompletionSource<bool>();
canvasGroup = GetComponent<CanvasGroup>();
reward = transform.Find("reward").GetComponent<RewardNormal>();
reward1 = transform.Find("reward_1").GetComponent<RewardNormal1>();
rewardBox1 = transform.Find("reward_box1").GetComponent<RewardBox>();
rewardFishBox = transform.Find("reward_show_1").GetComponent<RewardFishBox>();
rewardFishBoxOpen = transform.Find("reward_box_open").GetComponent<RewardFishBoxOpen>();
rewardAlbumComplete = transform.Find("album_complete").GetComponent<RewardAlbumComplete>();
rewardAlbumAllComplete = transform.Find("album_all_complete").GetComponent<RewardAlbumAllComplete>();
featuresUnlock = transform.Find("features_unlock").GetComponent<FeaturesUnlock>();
benefitUpgrade = transform.Find("Benefit_upgrade").GetComponent<BenefitUpgrade>();
rewardFishCardUpgrade = transform.Find("reward_fishcard_upgrade").GetComponent<RewardFishCardUpgrade>();
disposable = GContext.OnEvent<RewardPopupData>().Subscribe(OnRewardPopupData);
disposable1 = GContext.OnEvent<MaskFadeAlpha>().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<ItemData> itemDatas = null;
//有些弹窗需要展示物品 itemDatas 有些不需要 比如 FeaturesUnlock itemDatas可为空
if (showData.itemDatas != null)
{
//转换物品链处理
itemDatas = new List<ItemData>(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<GuideDataCenter>().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<ItemData> itemDatas)
{
GameObject go = await UIManager.Instance.ShowUILoad(UITypes.FishingAppearancePanel);
FishingAppearancePanel fishingAppearance = go.GetComponent<FishingAppearancePanel>();
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);
}
}