Files
ft/Client/Assets/Scripts/UI/PinataPack/PinataPack_PonyPanel.cs
2026-06-29 21:18:33 +08:00

184 lines
6.8 KiB
C#

using System;
using asap.core;
using cfg;
using game;
using GameCore;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class PinataPack_PonyPanel : MonoBehaviour
{
#region UI_ELEMENTS
private Button btn_purchase;
private Button btn_questionmark;
private RewardItemNew[] _rewardItemNews;
private TextMeshProUGUI p_text;
private TextMeshProUGUI _timeText;
private TextMeshProUGUI text_remaining;
[SerializeField] private float _delayShowTips = 0.1f;
[SerializeField] private float _delayCloseTips = 0.1f;
#endregion
private void Awake()
{
btn_purchase = this.transform.Find("root/btn_buy/btn_purchase").GetComponent<Button>();
btn_questionmark = this.transform.Find("root/btn_questionmark").GetComponent<Button>();
btn_questionmark.onClick.AddListener(OnClickQuestionmark);
btn_purchase.onClick.AddListener(OnClickPurchase);
_rewardItemNews = this.transform.Find("root/reward_4").GetComponentsInChildren<RewardItemNew>(true);
_timeText = this.transform.Find("root/text_time").GetComponent<TextMeshProUGUI>();
text_remaining = btn_purchase.transform.Find("Ani_Container/text_remaining").GetComponent<TextMeshProUGUI>();
p_text = btn_purchase.transform.Find("Ani_Container/p_text").GetComponent<TextMeshProUGUI>();
}
private void Start()
{
InitUI();
ShowUI();
}
private void ShowUI()
{
bool isNotNull = EventPinataPackDataManager.GetData(out var pinataPackData, out _,
out var packConfig_purchase, out _, out var eventPackManager);
if (!isNotNull) return;
_= ShowTips();
_timeText.text = ConvertTools.ConvertTime2(pinataPackData.RemainingTime);
var iapItem = GContext.container.Resolve<Tables>().TbIAPItemList?.GetOrDefault(packConfig_purchase.IAPID);
if (iapItem != null)
{
SKUDetailDataEvent sKUDetailDataEvent = new SKUDetailDataEvent(iapItem);
GContext.Publish(sKUDetailDataEvent);
p_text.text = sKUDetailDataEvent.price;
}
text_remaining.text = LocalizationMgr.GetFormatTextValue(
"UI_FishingShopPanel_1",
eventPackManager.MaxCount - pinataPackData.PurchasedCount,
eventPackManager.MaxCount);
var itemDatas = GContext.container.Resolve<PlayerItemData>()
.GetItemDataByDropIdLureInflation(null, packConfig_purchase.DropID);
if (itemDatas == null) return;
for (int i = 0; i < _rewardItemNews.Length && i < itemDatas.Count; i++)
{
_rewardItemNews[i].SetData(itemDatas[i]);
_rewardItemNews[i].gameObject.SetActive(true);
}
}
private void InitUI()
{
_timeText.text = string.Empty;
for (int i = 0; i < _rewardItemNews.Length; i++)
_rewardItemNews[i].gameObject.SetActive(false);
}
public void OnDestroy()
{
btn_purchase.onClick.RemoveAllListeners();
btn_questionmark.onClick.RemoveAllListeners();
}
private bool isPurchaseing = false;
private void OnClickPurchase()
{
if (isPurchaseing) return;
isPurchaseing = true;
Purchase();
}
private async Task ShowTips()
{
await Awaiters.Seconds(_delayShowTips);
if (!UIManager.Instance.GetContainedUI(UITypes.RewardPopupPanel))
OnClickQuestionmark();
await Awaiters.Seconds(_delayCloseTips);
UIManager.Instance.DestroyUI(UITypes.item_sanddig_tips);
}
private void OnClickQuestionmark()
{
EventPinataPackDataManager.GetData(out _, out _, out _, out int clickDropId, out _);
item_sanddig_tips.ShowBeta(btn_questionmark.transform.position, clickDropId, default);
}
private async void Purchase()
{
try
{
bool isNotNull = EventPinataPackDataManager.GetData(out _, out _, out var packConfig_purchase, out int clikcDropId, out _);
if (!isNotNull)
{
Debug.LogError($" [PinataPack_PonyPanel] Purchase Failed has null");
return;
}
ShopBuyTypeData shopBuyTypeData = new ShopBuyTypeData
{
type = ShopBuyType.None,
extraPurcheData=new JObject
{
{ nameof(EventPinataPackData), clikcDropId },
{"EventID", GContext.container.Resolve<EventPinataPackData>()?.EventID},
}
};
var iapItem = GContext.container.Resolve<Tables>().TbIAPItemList?.GetOrDefault(packConfig_purchase.IAPID);
if (iapItem == null)
{
Debug.LogError($" [PinataPack_PonyPanel] Purchase Failed iapItem is null ");
return;
}
var itemDatas = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropIdLureInflation(null, packConfig_purchase.DropID);
if (itemDatas == null)
{
Debug.LogError($" [PinataPack_PonyPanel] Purchase Failed itemDatas is null ");
return;
}
bool result = await GContext.container.Resolve<PlayerShopData>().OnBuy(packConfig_purchase.DropID, shopBuyTypeData, iapItem, itemDatas);
if (result)
{
GContext.OnEvent<RewardPanelClose>().Subscribe(OnRewardPanelClose).AddTo(this);
}
isPurchaseing = false;
}
catch (Exception e)
{
Debug.LogError($"[PinataPack_PonyPanel] Error processing type {e.Message}");
}
}
private async void OnEnterPinataPackPanelAsync()
{
var loadResourceService = GContext.container.Resolve<ILoadResourceService>();
bool isReady = await loadResourceService.Load(nameof(PinataPackAct));
EventPinataPackDataManager.GetData(out _, out var packMain, out _, out _, out _);
if (isReady)
{
var packData = GContext.container.Resolve<ILoadResourceService>();
GContext.Publish(new UnloadActToNextAct { actId = packMain.ActPrefab });
UIManager.Instance.DestroyUI(UITypes.PinataPack_PonyPanel);
}
else
{
var panel = await UIManager.Instance.ShowUI(UITypes.CloudTransitionPanel);
panel.GetComponent<CloudTransitionPanel>().SetBtn(true,
() =>
{
GContext.Publish(new UnloadActToNextAct(packMain.ActPrefab));
UIManager.Instance.DestroyUI(UITypes.PinataPack_PonyPanel);
});
}
}
void OnRewardPanelClose(RewardPanelClose e)
{
if (UIManager.Instance.GetContainedUI(UITypes.item_tips))
UIManager.Instance.DestroyUI(UITypes.item_tips);
OnEnterPinataPackPanelAsync();
}
}