Files
tcg-client/Assets/TcgEngine/Scripts/Menu/PackPanel.cs
YiHan0621 2e4a318ca3 UI导入
2025-10-11 14:30:38 +08:00

162 lines
4.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace TcgEngine.UI
{
/// <summary>
/// 卡包面板与收藏相似,但会显示您拥有的所有卡包以及所有可用卡包
/// </summary>
public class PackPanel : UIPanel
{
[Header("Packs")]
public ScrollRect scroll_rect;
public RectTransform scroll_content;
public CardGrid grid_content;
public GameObject pack_prefab;
[Header("货币")]
public Text coin;
public Text crystal;
[Header("当前选择准备卡组")]
public PackData preparePack;
private List<GameObject> pack_list = new List<GameObject>();
private static PackPanel instance;
protected override void Awake()
{
base.Awake();
instance = this;
//Delete grid content
for (int i = 0; i < grid_content.transform.childCount; i++)
Destroy(grid_content.transform.GetChild(i).gameObject);
}
protected override void Start()
{
base.Start();
}
protected override void Update()
{
base.Update();
}
public async void ReloadUserPack()
{
await Authenticator.Get().LoadUserData();
RefreshPacks();
}
/// <summary>
/// 刷新全部
/// </summary>
private void RefreshAll()
{
RefreshPacks();
RefreshStarterDeck();
RefreshCurrency();
}
public void RefreshPacks()
{
UserData udata = Authenticator.Get().UserData;
foreach (GameObject card in pack_list)
Destroy(card.gameObject);
pack_list.Clear();
foreach (PackData pack in PackData.GetAllAvailable())
{
GameObject nPack = Instantiate(pack_prefab, grid_content.transform);
PackUI pack_ui = nPack.GetComponentInChildren<PackUI>();
pack_ui.SetPack(pack, udata.GetPackQuantity(pack.id));
pack_ui.onClick += OnClickPack;
pack_ui.onClickRight += OnClickPack;
pack_list.Add(nPack);
if (pack.title == "白银卡包")
{
SetPackData(pack);
}
}
}
// 刷新新手卡组
private void RefreshStarterDeck()
{
UserData udata = Authenticator.Get().UserData;
if (udata != null && (udata.cards.Length == 0 || udata.rewards.Length == 0))
{
if (GameplayData.Get().starter_decks.Length > 0)
{
StarterDeckPanel.Get().Show();
}
}
}
private void OnClickPack()
{
if (preparePack != null)
{
PackZoomPanel.Get().OnClickBuy(preparePack);
}
}
/// <summary>
/// 刷新货币
/// </summary>
public void RefreshCurrency()
{
coin.text = MainMenu.Get().credits_txt.text;
crystal.text = MainMenu.Get().crystalText.text;
}
/// <summary>
/// 设置即将打开卡包的数据
/// </summary>
private string SetPackData(PackData pack)
{
PlayerPrefs.SetString("SetPack",pack.id);
if (PlayerPrefs.GetString("SetPack") != null)
{
string setPack = PlayerPrefs.GetString("SetPack");
Debug.Log($"已设置{setPack},准备就绪");
}
return PlayerPrefs.GetString("SetPack");
}
public void OnClickPack(PackUI pack)
{
PackZoomPanel.Get().ShowPack(pack.GetPack());
}
public void OnClickCardRight(PackUI pack)
{
PackZoomPanel.Get().ShowPack(pack.GetPack());
}
public void OnClickOpenPacks()
{
MainMenu.Get().FadeToScene("OpenPack");
}
public override void Show(bool instant = false)
{
base.Show(instant);
RefreshAll();
}
public static PackPanel Get()
{
return instance;
}
}
}