184 lines
6.8 KiB
C#
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();
|
|
}
|
|
}
|