切换牌组封面

This commit is contained in:
YiHan0621
2025-10-13 18:30:07 +08:00
parent f14b8d6ac6
commit e84768d8fb
8 changed files with 230 additions and 35 deletions

View File

@@ -9,10 +9,12 @@ namespace TcgEngine
public class ChangeCoverLine : MonoBehaviour
{
public Image cover;
public Image currentCover;
public string coverName;
private Button cover_settings_btn;
public UnityAction<ChangeCoverLine> OnChangeCover;
/// <summary>
/// 初始化封面显示
/// </summary>
@@ -20,15 +22,33 @@ namespace TcgEngine
{
if (cover != null)
cover.sprite = coverSprite;
coverName = name;
cover_settings_btn = cover.GetComponent<Button>();
cover_settings_btn.onClick.AddListener(OnClickCover);
}
public void RefreshCurrentCover(string coverName)
{
if (currentCover != null)
{
Debug.Log(coverName);
if (this.coverName == coverName)
{
currentCover.color = Color.yellow;
}
else
{
currentCover.color = Color.white;
}
}
}
/// <summary>
/// 点击选择封面
/// </summary>
public void OnClickCover()
private void OnClickCover()
{
Debug.Log(coverName);
OnChangeCover?.Invoke(this);
}
}

View File

@@ -11,6 +11,13 @@ namespace TcgEngine.UI
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;
@@ -25,7 +32,6 @@ namespace TcgEngine.UI
protected override void Start()
{
base.Start();
GenerateCardCovers();
}
/// <summary>
@@ -39,25 +45,52 @@ namespace TcgEngine.UI
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()
{
// dsdd
int ss = 0;
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();
coverNameText.text = line.title.text;
}
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()

View File

@@ -6,8 +6,8 @@ using UnityEngine.UI;
namespace TcgEngine.UI
{
/// <summary>
/// CollectionPanel is the panel where players can see all the cards they own
/// Also the panel where they can use the deckbuilder
/// CollectionPanel 玩家可以看到他们拥有的所有卡片的面板
/// 还有他们可以使用甲板建造者的面板
/// </summary>
public class CollectionPanel : UIPanel
@@ -64,6 +64,7 @@ namespace TcgEngine.UI
private List<DeckLine> deck_card_lines = new List<DeckLine>();
private string current_deck_tid;
private Image current_deck_image;
private bool editing_deck = false;
private bool saving = false;
private bool spawned = false;
@@ -72,8 +73,6 @@ namespace TcgEngine.UI
private List<UserCardData> deck_cards = new List<UserCardData>();
// [SerializeField] private Text cardFragmentsText;
private static CollectionPanel instance;
protected override void Awake()
@@ -122,11 +121,6 @@ namespace TcgEngine.UI
protected override void Update()
{
base.Update();
if (ApiClient.Get() != null)
{
UserData udata = ApiClient.Get().UserData;
// cardFragmentsText.text = udata.cardfragments.ToString();
}
}
private void LateUpdate()
@@ -187,6 +181,11 @@ namespace TcgEngine.UI
RefreshCardsQuantities();
}
public void RefreshCover(Image cover)
{
current_deck_image.sprite = cover.sprite;
}
public async void ReloadUserDecks()
{
await Authenticator.Get().LoadUserData();
@@ -381,7 +380,7 @@ namespace TcgEngine.UI
RefreshCardsQuantities();
}
private void RefreshDeck(UserDeckData deck)
public void RefreshDeck(UserDeckData deck)
{
deck_title.text = "Deck Name";
current_deck_tid = GameTool.GenerateRandomID(7);
@@ -558,8 +557,7 @@ namespace TcgEngine.UI
ShowNotification("卡组数量错误,无法保存。当前总数: " + totalCardCount + ", 需要: " + GameplayData.Get().deck_size);
return;
}
UserData udata = Authenticator.Get().UserData;
UserDeckData udeck = new UserDeckData();
udeck.tid = current_deck_tid;
@@ -568,6 +566,10 @@ namespace TcgEngine.UI
udeck.hero.tid = GetSelectedHeroId();
udeck.hero.variant = VariantData.GetDefault().id;
udeck.cards = deck_cards.ToArray();
if (string.IsNullOrEmpty(udeck.cover))
{
udeck.cover = "wind";
}
saving = true;
if (Authenticator.Get().IsTest())
@@ -586,7 +588,7 @@ namespace TcgEngine.UI
ReloadUserDecks();
}
private async void SaveDeckAPI(UserData udata, UserDeckData udeck)
public async void SaveDeckAPI(UserData udata, UserDeckData udeck)
{
string url = ApiClient.ServerURL + "/users/deck/" + udeck.tid;
string jdata = ApiTool.ToJson(udeck);
@@ -763,6 +765,7 @@ namespace TcgEngine.UI
public void OnChangeCover(DeckLine line)
{
current_deck_image = line.image;
ChangeCoverPanel.Get().OpenPanel(line);
}

View File

@@ -132,7 +132,18 @@ namespace TcgEngine.UI
this.value.enabled = deck.GetQuantity() > 0;
if (this.value != null)
this.value.color = udata.IsDeckValid(deck) ? Color.white : Color.red;
if (this.image != null)
{
Debug.Log($"读取:{deck.cover}");
if (string.IsNullOrEmpty(deck.cover))
{
deck.cover = "fire";
CollectionPanel.Get().SaveDeckAPI(udata, deck);
}
CardCoverData cover = CardCoverData.Get(deck.cover);
this.image.enabled = true;
this.image.sprite = cover.GetCardCover();
}
gameObject.SetActive(true);
}

View File

@@ -69,7 +69,7 @@ namespace TcgEngine.UI
PackPanel.Get()?.ReloadUserPack();
PackPanel.Get()?.RefreshCurrency();
}
if (HandPackArea.Get() != null)
{
HandPackArea.Get().LoadPacks();