切换牌组封面
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace TcgEngine.UI
|
||||
PackPanel.Get()?.ReloadUserPack();
|
||||
PackPanel.Get()?.RefreshCurrency();
|
||||
}
|
||||
|
||||
|
||||
if (HandPackArea.Get() != null)
|
||||
{
|
||||
HandPackArea.Get().LoadPacks();
|
||||
|
||||
Reference in New Issue
Block a user