卡组优化(分帧加载)
This commit is contained in:
@@ -68,8 +68,12 @@ namespace TcgEngine.UI
|
||||
private bool editing_deck = false;
|
||||
private bool saving = false;
|
||||
private bool spawned = false;
|
||||
|
||||
private bool update_grid = false;
|
||||
private float update_grid_timer = 0f;
|
||||
|
||||
// 分帧加载
|
||||
private Coroutine spawnRoutine;
|
||||
|
||||
private List<UserCardData> deck_cards = new List<UserCardData>();
|
||||
|
||||
@@ -139,17 +143,40 @@ namespace TcgEngine.UI
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SpawnCards()
|
||||
|
||||
public void SpawnCards()
|
||||
{
|
||||
spawned = true;
|
||||
|
||||
all_list = CardUILoading.Get().CardList();
|
||||
foreach (CollectionCard dCard in all_list)
|
||||
{
|
||||
dCard.onClick += OnClickCard;
|
||||
dCard.onClickRight += OnClickCardRight;
|
||||
}
|
||||
|
||||
|
||||
// if (spawnRoutine != null)
|
||||
// StopCoroutine(spawnRoutine);
|
||||
// spawnRoutine = StartCoroutine(SpawnCardsCoroutine());
|
||||
}
|
||||
|
||||
private IEnumerator SpawnCardsCoroutine()
|
||||
{
|
||||
spawned = true;
|
||||
foreach (CollectionCard card in all_list)
|
||||
Destroy(card.gameObject);
|
||||
all_list.Clear();
|
||||
|
||||
foreach (VariantData variant in VariantData.GetAll())
|
||||
int batchSize = 2; // 每帧生成2张卡
|
||||
int counter = 0;
|
||||
|
||||
List<VariantData> variants = VariantData.GetAll();
|
||||
List<CardData> cards = CardData.GetAll();
|
||||
|
||||
foreach (VariantData variant in variants)
|
||||
{
|
||||
foreach (CardData card in CardData.GetAll())
|
||||
foreach (CardData card in cards)
|
||||
{
|
||||
GameObject nCard = Instantiate(card_prefab, grid_content.transform);
|
||||
CollectionCard dCard = nCard.GetComponent<CollectionCard>();
|
||||
@@ -159,9 +186,49 @@ namespace TcgEngine.UI
|
||||
|
||||
all_list.Add(dCard);
|
||||
nCard.SetActive(false);
|
||||
|
||||
counter++;
|
||||
if (counter % batchSize == 0)
|
||||
yield return null; // 每 batchSize 张卡让出一帧
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// private IEnumerator SpawnCardsCoroutine()
|
||||
// {
|
||||
// spawned = true;
|
||||
// foreach (CollectionCard card in all_list)
|
||||
// Destroy(card.gameObject);
|
||||
// all_list.Clear();
|
||||
//
|
||||
// int batchSize = 2; // 每帧生成2张卡
|
||||
// int counter = 0;
|
||||
//
|
||||
// List<VariantData> variants = VariantData.GetAll();
|
||||
// List<CardData> cards = CardData.GetAll();
|
||||
//
|
||||
// foreach (VariantData variant in variants)
|
||||
// {
|
||||
// foreach (CardData card in cards)
|
||||
// {
|
||||
// GameObject nCard = Instantiate(card_prefab, grid_content.transform);
|
||||
// CollectionCard dCard = nCard.GetComponent<CollectionCard>();
|
||||
// dCard.SetCard(card, variant, 0);
|
||||
// dCard.onClick += OnClickCard;
|
||||
// dCard.onClickRight += OnClickCardRight;
|
||||
//
|
||||
// all_list.Add(dCard);
|
||||
// nCard.SetActive(false);
|
||||
//
|
||||
// counter++;
|
||||
// if (counter % batchSize == 0)
|
||||
// yield return null; // 每 batchSize 张卡让出一帧
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// isLoaded = true;
|
||||
// Hide();
|
||||
// }
|
||||
|
||||
//----- Reload User Data ---------------
|
||||
|
||||
@@ -261,14 +328,30 @@ namespace TcgEngine.UI
|
||||
all_cards.Add(card);
|
||||
}
|
||||
|
||||
if (filter_dropdown == 0) //Name
|
||||
all_cards.Sort((CardDataQ a, CardDataQ b) => { return a.card.title.CompareTo(b.card.title); });
|
||||
if (filter_dropdown == 1) //Attack
|
||||
all_cards.Sort((CardDataQ a, CardDataQ b) => { return b.card.attack == a.card.attack ? b.card.hp.CompareTo(a.card.hp) : b.card.attack.CompareTo(a.card.attack); });
|
||||
if (filter_dropdown == 2) //hp
|
||||
all_cards.Sort((CardDataQ a, CardDataQ b) => { return b.card.hp == a.card.hp ? b.card.attack.CompareTo(a.card.attack) : b.card.hp.CompareTo(a.card.hp); });
|
||||
if (filter_dropdown == 3) //Cost
|
||||
all_cards.Sort((CardDataQ a, CardDataQ b) => { return b.card.mana == a.card.mana ? a.card.title.CompareTo(b.card.title) : a.card.mana.CompareTo(b.card.mana); });
|
||||
// 统一的基础排序逻辑
|
||||
all_cards.Sort((CardDataQ a, CardDataQ b) =>
|
||||
{
|
||||
// 第一级排序:isOnline(false 的永远在最下面)
|
||||
bool aOnline = a.card.isOnline;
|
||||
bool bOnline = b.card.isOnline;
|
||||
if (aOnline != bOnline)
|
||||
return bOnline.CompareTo(aOnline); // true在前 false在后
|
||||
|
||||
// 第二级排序:根据 dropdown 决定方式
|
||||
switch (filter_dropdown)
|
||||
{
|
||||
case 0: // Name
|
||||
return a.card.title.CompareTo(b.card.title);
|
||||
case 1: // Attack
|
||||
return b.card.attack == a.card.attack ? b.card.hp.CompareTo(a.card.hp) : b.card.attack.CompareTo(a.card.attack);
|
||||
case 2: // HP
|
||||
return b.card.hp == a.card.hp ? b.card.attack.CompareTo(a.card.attack) : b.card.hp.CompareTo(a.card.hp);
|
||||
case 3: // Mana Cost
|
||||
return b.card.mana == a.card.mana ? a.card.title.CompareTo(b.card.title) : a.card.mana.CompareTo(b.card.mana);
|
||||
default:
|
||||
return a.card.title.CompareTo(b.card.title);
|
||||
}
|
||||
});
|
||||
|
||||
foreach (CardDataQ card in all_cards)
|
||||
{
|
||||
@@ -845,6 +928,11 @@ namespace TcgEngine.UI
|
||||
ShowDeckList();
|
||||
}
|
||||
|
||||
public override void Hide(bool instant = false)
|
||||
{
|
||||
base.Hide(instant);
|
||||
}
|
||||
|
||||
public static CollectionPanel Get()
|
||||
{
|
||||
return instance;
|
||||
|
||||
Reference in New Issue
Block a user