Files
tcg-client/Assets/TcgEngine/Scripts/Menu/ChangeCoverPanel.cs
2025-10-13 18:30:07 +08:00

103 lines
2.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace TcgEngine.UI
{
public class ChangeCoverPanel : UIPanel
{
public Text coverNameText;
public Transform content;
public GameObject coverPrefab;
// 防止重复点击
public Image clickBlocker;
public UserDeckData udeck;
private List<ChangeCoverLine> lineList = new List<ChangeCoverLine>();
private bool isInit = false;
private static ChangeCoverPanel instance;
protected override void Awake()
{
base.Awake();
instance = this;
for (int i = 0; i < content.childCount; i++)
Destroy(content.GetChild(i).gameObject);
}
protected override void Start()
{
base.Start();
}
/// <summary>
/// 生成并排布所有卡片封面
/// </summary>
private void GenerateCardCovers()
{
Debug.Log("数据有"+CardCoverData.GetAll().Count);
foreach (CardCoverData cover in CardCoverData.GetAll())
{
GameObject cardCover = Instantiate(coverPrefab, content);
var line = cardCover.GetComponent<ChangeCoverLine>();
line.SetCover(cover.GetCardCover(), cover.name);
line.OnChangeCover += SaveCardCover;
lineList.Add(line);
}
isInit = true;
}
private void RefreshPanel()
{
foreach (var line in lineList)
{
line.RefreshCurrentCover(udeck.cover);
}
}
public void OpenPanel(DeckLine line)
{
if (!isInit)
{
GenerateCardCovers();
}
Show();
udeck = line.GetUserDeck();
coverNameText.text = udeck.title;
RefreshPanel();
}
public void SaveCardCover(ChangeCoverLine line)
{
UserData udata = Authenticator.Get().UserData;
udeck.cover = line.coverName;
clickBlocker.gameObject.SetActive(true);
// ✅ 立即刷新当前 UI
RefreshPanel(); // 封面变黄
CollectionPanel.Get().RefreshCover(line.cover); // 卡组封面即时更新
CollectionPanel.Get().SaveDeckAPI(udata, udeck);
Hide();
}
public override void Show(bool instant = false)
{
base.Show(instant);
clickBlocker.gameObject.SetActive(false);
}
public static ChangeCoverPanel Get()
{
return instance;
}
}
}