备份CatanBuilding瘦身独立工程
This commit is contained in:
253
Assets/Scripts/UI/Shop/ItemsShopPanel.cs
Normal file
253
Assets/Scripts/UI/Shop/ItemsShopPanel.cs
Normal file
@@ -0,0 +1,253 @@
|
||||
using asap.core;
|
||||
using cfg;
|
||||
using GameCore;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using TMPro;
|
||||
using tysdk;
|
||||
using UniRx;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
/// <summary>
|
||||
/// hasBought: 0 未购买 1 已购买
|
||||
/// </summary>
|
||||
public class ItemShopRecord
|
||||
{
|
||||
public int ItemID;
|
||||
public float Discount;
|
||||
public int hasBought;
|
||||
public ItemShopRecord(int itemID, float discount, int hasBought)
|
||||
{
|
||||
ItemID = itemID;
|
||||
this.Discount = discount;
|
||||
this.hasBought = hasBought;
|
||||
}
|
||||
}
|
||||
public class ItemsShopPanel : MonoBehaviour
|
||||
{
|
||||
|
||||
#region Field&&Property
|
||||
[SerializeField]
|
||||
private GameObject
|
||||
go_refreshFree,
|
||||
go_refreshDiamonIcon,
|
||||
go_fishCardSlot,
|
||||
go_itemSlot;
|
||||
[SerializeField]
|
||||
private Transform
|
||||
tran_fishCardParent,
|
||||
tran_itemSlotParent;
|
||||
[SerializeField]
|
||||
private List<EnergyShopSlot> _energyShopSlots = new List<EnergyShopSlot>();
|
||||
private List<ItemShopSlot> _itemShopSlots = new List<ItemShopSlot>();
|
||||
|
||||
[SerializeField]
|
||||
private TMP_Text
|
||||
txt_curMap,
|
||||
txt_itemShopTimer,
|
||||
txt_refreshCost;
|
||||
|
||||
[SerializeField]
|
||||
private Button
|
||||
btn_chagneMap,
|
||||
btn_refreshGray,
|
||||
btn_refresh;
|
||||
|
||||
private List<ItemStore> _itemStores;
|
||||
private List<ResourceStore> _energySlotDatas;
|
||||
private List<ResourceStore> _fishCardSlotDatas;
|
||||
|
||||
private PlayerShopData _shopData;
|
||||
private int curSlelectingMapID;
|
||||
|
||||
private TimeSpan _autoRefreshTimer;
|
||||
#endregion
|
||||
|
||||
IDisposable disposable;
|
||||
#region Function
|
||||
private void Awake()
|
||||
{
|
||||
go_itemSlot.SetActive(false);
|
||||
go_fishCardSlot.SetActive(false);
|
||||
var tables = GContext.container.Resolve<Tables>();
|
||||
_itemStores = tables.TbItemStore.DataList;
|
||||
_shopData = GContext.container.Resolve<PlayerShopData>();
|
||||
_energySlotDatas = tables.TbResourceStore.DataList.Where(x => x.Type == 1 && x.IsShow == 1).ToList();
|
||||
_fishCardSlotDatas = tables.TbResourceStore.DataList.Where(x => x.Type == 2).ToList();
|
||||
disposable = GContext.OnEvent<FishCardShopSlot.SChangeFishCardMapEvent>().Where(x => x.IsConfirm).Subscribe(x => OnChangeMapID(x));
|
||||
}
|
||||
protected void Start()
|
||||
{
|
||||
btn_refresh.onClick.AddListener(OnRefresh);
|
||||
btn_refreshGray.onClick.AddListener(OnCannotRefersh);
|
||||
btn_chagneMap.onClick.AddListener(OnChagneFishCardMap);
|
||||
|
||||
RefreshView();
|
||||
}
|
||||
protected void OnDestroy()
|
||||
{
|
||||
disposable?.Dispose();
|
||||
disposable = null;
|
||||
btn_refresh.onClick.RemoveAllListeners();
|
||||
}
|
||||
private void OnEnable()
|
||||
{
|
||||
StopAllCoroutines();
|
||||
StartCoroutine(IE_SetTimer());
|
||||
}
|
||||
|
||||
private void RefreshView()
|
||||
{
|
||||
RefreshEnergySlots();
|
||||
RefreshItemSlots();
|
||||
RefreshRefreshInfo();
|
||||
RefreshFishCardSlots();
|
||||
StopAllCoroutines();
|
||||
StartCoroutine(IE_SetTimer());
|
||||
}
|
||||
private void RefreshItemBars()
|
||||
{
|
||||
RefreshItemSlots();
|
||||
RefreshRefreshInfo();
|
||||
StopAllCoroutines();
|
||||
StartCoroutine(IE_SetTimer());
|
||||
}
|
||||
|
||||
private void RefreshFishCardSlots()
|
||||
{
|
||||
var curMapID = GContext.container.Resolve<PlayerData>().currentMapId;
|
||||
var mapData = GContext.container.Resolve<Tables>().GetMapData(curMapID);
|
||||
OnChangeMapID(new FishCardShopSlot.SChangeFishCardMapEvent { MapData = mapData });
|
||||
for (int i = 0; i < _fishCardSlotDatas.Count; i++)
|
||||
{
|
||||
var fishCardSlot = Instantiate(go_fishCardSlot, tran_fishCardParent).GetComponent<FishCardShopSlot>();
|
||||
fishCardSlot.SetData(_fishCardSlotDatas[i], curMapID);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnChangeMapID(FishCardShopSlot.SChangeFishCardMapEvent data)
|
||||
{
|
||||
curSlelectingMapID = data.MapData.ID;
|
||||
txt_curMap.text = LocalizationMgr.GetText(data.MapData.Name_l10n_key);
|
||||
}
|
||||
private void RefreshEnergySlots()
|
||||
{
|
||||
for (int i = 0; i < _energySlotDatas.Count; i++)
|
||||
{
|
||||
if (i >= _energyShopSlots.Count)
|
||||
{
|
||||
Debug.LogError("EnergySLot Not Enough!");
|
||||
return;
|
||||
}
|
||||
_energyShopSlots[i].SetData(_energySlotDatas[i]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshItemSlots()
|
||||
{
|
||||
foreach (var slot in _itemShopSlots)
|
||||
{
|
||||
Destroy(slot.gameObject);
|
||||
}
|
||||
_itemShopSlots.Clear();
|
||||
var shopDatas = _shopData.GetItemShopData();
|
||||
foreach (var data in shopDatas)
|
||||
{
|
||||
var slot = Instantiate(go_itemSlot, tran_itemSlotParent).GetComponent<ItemShopSlot>();
|
||||
slot.SetData(data);
|
||||
_itemShopSlots.Add(slot);
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshRefreshInfo()
|
||||
{
|
||||
var cost = _shopData.GetDiamondShopRefreshCost();
|
||||
if (cost == 0)
|
||||
{
|
||||
go_refreshFree.SetActive(true);
|
||||
go_refreshDiamonIcon.SetActive(false);
|
||||
txt_refreshCost.gameObject.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
go_refreshFree.SetActive(false);
|
||||
go_refreshDiamonIcon.SetActive(true);
|
||||
txt_refreshCost.gameObject.SetActive(true);
|
||||
txt_refreshCost.text = cost.ToString();
|
||||
}
|
||||
var refreshInfo = _shopData.GetDiamondShopRefreshInfo();
|
||||
if (refreshInfo.refresh <= 0)
|
||||
{
|
||||
btn_refreshGray.transform.parent.gameObject.SetActive(true);
|
||||
btn_refresh.transform.parent.gameObject.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
btn_refreshGray.transform.parent.gameObject.SetActive(false);
|
||||
btn_refresh.transform.parent.gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void OnRefresh()
|
||||
{
|
||||
var diamondCount = GContext.container.Resolve<PlayerData>().diamond;
|
||||
var cost = _shopData.GetDiamondShopRefreshCost();
|
||||
if (diamondCount >= cost)
|
||||
{
|
||||
GContext.container.Resolve<PlayerData>().AddDiamond(-cost);
|
||||
_shopData.RefreshDiamondShop();
|
||||
RefreshItemBars();
|
||||
#if AGG
|
||||
using (var e = GEvent.GameEvent("click_free_button"))
|
||||
{
|
||||
var refreshInfo = _shopData.GetDiamondShopRefreshInfo();
|
||||
e.AddContent("cost_diamond_count", cost)
|
||||
.AddContent("click_free_count", refreshInfo.refresh);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_59"));
|
||||
}
|
||||
private void OnCannotRefersh()
|
||||
{
|
||||
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_64"));
|
||||
|
||||
}
|
||||
private async void OnChagneFishCardMap()
|
||||
{
|
||||
var selectPanel = await UIManager.Instance.ShowUI(UITypes.FishingShopSelectMapPopupPanel);
|
||||
selectPanel.GetComponent<FishingShopSelectMapPopupPanel>().Init(curSlelectingMapID);
|
||||
}
|
||||
private void OnTimerEnd()
|
||||
{
|
||||
GContext.container.Resolve<PlayerShopData>().AutoRefreshDiamonShop();
|
||||
RefreshItemBars();
|
||||
}
|
||||
|
||||
private IEnumerator IE_SetTimer()
|
||||
{
|
||||
_autoRefreshTimer = _shopData.GetDiamondShopRefreshTime();
|
||||
var miliSeconds = _autoRefreshTimer.Milliseconds;
|
||||
txt_itemShopTimer.text = LocalizationMgr.GetFormatTextValue("UI_COMMON_refresh", ConvertTools.ConvertTime2(_autoRefreshTimer));
|
||||
yield return new WaitForSeconds(miliSeconds / 1000);
|
||||
_autoRefreshTimer.Subtract(TimeSpan.FromMilliseconds(miliSeconds));
|
||||
txt_itemShopTimer.text = LocalizationMgr.GetFormatTextValue("UI_COMMON_refresh", ConvertTools.ConvertTime2(_autoRefreshTimer));
|
||||
|
||||
while (_autoRefreshTimer.TotalSeconds > 0)
|
||||
{
|
||||
yield return new WaitForSeconds(1);
|
||||
_autoRefreshTimer = _autoRefreshTimer.Subtract(TimeSpan.FromSeconds(1));
|
||||
txt_itemShopTimer.text = LocalizationMgr.GetFormatTextValue("UI_COMMON_refresh", ConvertTools.ConvertTime2(_autoRefreshTimer));
|
||||
}
|
||||
OnTimerEnd();
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user