增加新版出战卡组选定功能和删除功能

This commit is contained in:
YiHan0621
2025-09-19 18:32:19 +08:00
parent 6e3e6b59a5
commit fadcb295d2
5 changed files with 211 additions and 64 deletions

View File

@@ -3507,7 +3507,7 @@ RectTransform:
- {fileID: 129251830}
- {fileID: 297486962}
m_Father: {fileID: 396921783552706682}
m_RootOrder: 5
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
@@ -6109,7 +6109,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -6119,7 +6119,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -6169,12 +6169,12 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
value: 242.26
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
value: -265
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -6320,7 +6320,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0.00040302204, y: -0.000011679191}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 1505.8}
m_Pivot: {x: 0, y: 1}
--- !u!114 &274366308
@@ -18386,10 +18386,14 @@ MonoBehaviour:
deck_lines_prefab: {fileID: 5462092070690285035, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
deck_line_content: {fileID: 274366307}
card_lines_prefab: {fileID: 7172856987813669151, guid: 0ae4403cc5a08794e8aaded9a236a0c0,
type: 3}
deck_display_grid: {fileID: 545236223}
deleteDeckButton: {fileID: 122017643}
deckSelector: {fileID: 1905130909}
dropdownValue: {fileID: 1905130910}
currentSelect: 0
selectDeckButton: {fileID: 0}
active_lines_size: 12
card_lines_size: 12
--- !u!1001 &955449648
PrefabInstance:
m_ObjectHideFlags: 0
@@ -19889,7 +19893,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -19899,7 +19903,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -19949,12 +19953,12 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
value: 242.26
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
value: -80
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -24942,7 +24946,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -24952,7 +24956,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -25002,12 +25006,12 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
value: 242.26
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
value: -450
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -25805,7 +25809,7 @@ GameObject:
- component: {fileID: 1316614043}
- component: {fileID: 1316614042}
m_Layer: 5
m_Name: DeckDisplayPanelScrollView
m_Name: DeckDisplayScrollView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -26324,7 +26328,7 @@ RectTransform:
- {fileID: 104831691}
- {fileID: 1415076148}
m_Father: {fileID: 396921783552706682}
m_RootOrder: 4
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
@@ -26939,7 +26943,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -26949,7 +26953,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -26999,12 +27003,12 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
value: 242.26
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
value: -820
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -32921,10 +32925,10 @@ RectTransform:
m_Father: {fileID: 947751578}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 220.00006, y: 0}
m_SizeDelta: {x: -1386, y: -3.869995}
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: 268, y: 1.87}
m_SizeDelta: {x: 536, y: 1080.13}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!225 &1678690565
CanvasGroup:
@@ -32934,7 +32938,7 @@ CanvasGroup:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1678690563}
m_Enabled: 1
m_Alpha: 0
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
@@ -32951,7 +32955,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Color: {r: 1, g: 1, b: 1, a: 0}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
@@ -33007,7 +33011,7 @@ RectTransform:
- {fileID: 396921783211662064}
- {fileID: 234734681}
m_Father: {fileID: 396921783552706682}
m_RootOrder: 3
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
@@ -40162,7 +40166,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -40172,7 +40176,7 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -40222,12 +40226,12 @@ PrefabInstance:
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
value: 242.26
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
value: -635
objectReference: {fileID: 0}
- target: {fileID: 5462092070690285012, guid: 4c6aae1ce058f1f43b681dfa8551e258,
type: 3}
@@ -47548,9 +47552,9 @@ RectTransform:
- {fileID: 875326975}
- {fileID: 396921782284966962}
- {fileID: 1417375446}
- {fileID: 1684894604}
- {fileID: 1334454749}
- {fileID: 149393132}
- {fileID: 1684894604}
- {fileID: 644190901}
- {fileID: 187141751}
- {fileID: 1521067878}

View File

@@ -594,7 +594,7 @@ namespace TcgEngine.UI
}
}
private async void DeleteDeck(string deck_tid)
public async void DeleteDeck(string deck_tid)
{
UserData udata = Authenticator.Get().UserData;
UserDeckData udeck = udata.GetDeck(deck_tid);

View File

@@ -136,7 +136,6 @@ namespace TcgEngine.UI
hidden = false;
if(this.title!=null)
this.title.text = deck.title;
}
public void SetLine(string title)
@@ -185,6 +184,47 @@ namespace TcgEngine.UI
gameObject.SetActive(false);
}
#region ================== ==================
/// <summary>
/// 重置数据并隐藏
/// </summary>
public void ResetLine()
{
card = null;
variant = null;
deck = null;
udeck = null;
hidden = true;
hover = false;
if (title) title.text = "";
if (value) { value.text = ""; value.enabled = false; }
if (cost) cost.value = 0;
if (image) image.enabled = false;
if (frame) frame.enabled = false;
if (delete_btn) delete_btn.SetVisible(false);
gameObject.SetActive(false);
}
/// <summary>
/// 刷新用户自定义牌组
/// </summary>
public void Refresh(UserData udata, UserDeckData udeck)
{
SetLine(udata, udeck);
}
/// <summary>
/// 刷新单卡
/// </summary>
public void Refresh(CardData card, VariantData variant, int quantity, bool invalid = false)
{
SetLine(card, variant, quantity, invalid);
}
#endregion
public CardData GetCard()
{
return card;

View File

@@ -35,12 +35,13 @@ namespace TcgEngine.UI
deck_dropdown.AddOption("random", "Random");
//Add standard decks
// 添加标准卡组
foreach (DeckData deck in GameplayData.Get().free_decks)
{
deck_dropdown.AddOption(deck.id, deck.title);
}
// 添加自定义卡组
UserData udata = Authenticator.Get().UserData;
if (udata != null)
{
@@ -98,6 +99,7 @@ namespace TcgEngine.UI
public void SelectDeck(string deck)
{
Debug.Log($"111{deck}");
//Make sure deck exists, to prevent assigning invalid deck
UserData udata = Authenticator.Get().UserData;
UserDeckData udeck = udata?.GetDeck(deck);

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@@ -16,17 +17,30 @@ namespace TcgEngine.UI
public GameObject deck_lines_prefab;
public RectTransform deck_line_content;
[Header("展示卡组")]
public GameObject card_lines_prefab;
public GridLayoutGroup deck_display_grid;
[Header("预设面板")]
public Button deleteDeckButton;
public DeckSelector deckSelector;
public DropdownValue dropdownValue;
public int currentSelect;
public Button selectDeckButton;
private Button hide_panel_button;
// 选择卡组面板
private Dictionary<int, DropdownValueItem> desk_lines = new Dictionary<int, DropdownValueItem>();
// 卡组管理
public int active_lines_size = 12;
private List<DeckLine> active_pool = new List<DeckLine>();
private List<DeckLine> active_lines = new List<DeckLine>();
// 卡组展示管理
public int card_lines_size = 12;
private List<DeckLine> card_pool = new List<DeckLine>();
private List<DeckLine> card_lines = new List<DeckLine>();
private List<UserCardData> deck_cards = new List<UserCardData>();
private UserData lastUserData;
private int currIndex = 0;
private static PresetDeck instance;
@@ -34,44 +48,132 @@ namespace TcgEngine.UI
{
base.Awake();
instance = this;
for (int i = 0; i < deck_line_content.transform.childCount; i++)
Destroy(deck_line_content.transform.GetChild(i).gameObject);
for (int i = 0; i < deck_display_grid.transform.childCount; i++)
Destroy(deck_display_grid.transform.GetChild(i).gameObject);
for (int i = 0; i < active_lines_size; i++)
{
GameObject deckLine = Instantiate(deck_lines_prefab, deck_line_content.transform);
DeckLine line = deckLine.GetComponent<DeckLine>();
line.gameObject.SetActive(false);
line.onClick += OnClickLine;
active_pool.Add(line);
}
for (int i = 0; i < card_lines_size; i++)
{
GameObject card = Instantiate(card_lines_prefab, deck_display_grid.transform);
DeckLine line = card.GetComponent<DeckLine>();
line.gameObject.SetActive(false);
card_pool.Add(line);
}
}
protected override void Start()
{
base.Start();
for (int i = 0; i < deck_line_content.transform.childCount; i++)
Destroy(deck_line_content.transform.GetChild(i).gameObject);
preset_lineup_button.onClick.AddListener(OnPresetLineupPanle);
hide_panel_button = hide_panel.GetComponent<Button>();
hide_panel_button.onClick.AddListener(OffPresetLineupPanle);
deleteDeckButton.onClick.AddListener(OnDeleteDeck);
}
public void SetupUserDeckList()
#region
/// <summary>
/// 设置卡组
/// </summary>
private void SetupUserDeckList()
{
desk_lines.Clear();
if (dropdownValue == null)
UserData udata = Authenticator.Get().UserData;
if (udata == null || udata.decks == null || udata.decks.Length == 0)
return;
int index = 0;
foreach (DropdownValueItem item in dropdownValue.Items)
foreach (var line in active_pool)
line.ResetLine();
active_lines.Clear();
for (int i = 0; i < udata.decks.Length; i++)
{
desk_lines.Add(index,item);
index++;
DeckLine line = active_pool[i];
line.Refresh(udata,udata.decks[i]);
line.gameObject.SetActive(true);
active_lines.Add(line);
}
if (desk_lines != null)
if (active_lines.Count > 0)
{
for (int i = 0; i < desk_lines.Count; i++)
{
GameObject deckLine = Instantiate(deck_lines_prefab, deck_line_content.transform);
var line = deckLine.GetComponent<DeckLine>();
line.title.text = desk_lines[i].text;
line.onClick += OnSelectDeck;
}
deck_line_content.sizeDelta = new Vector2(0, active_lines.Count * (160 + 25));
}
// 默认选中第一个
if (currIndex == 0 && active_lines.Count > 0)
{
deckSelector.SelectDeck(active_lines[0].GetUserDeck().tid);
currIndex += 1;
// SetupUserCardList();
}
}
private void OnClickLine(DeckLine line)
{
Debug.Log(line.title.text);
deckSelector.SelectDeck(line.GetUserDeck().tid);
// 获取索引
currIndex = active_lines.IndexOf(line) + 1;
// SetupUserCardList();
}
/// <summary>
/// 删除卡组
/// </summary>
private void OnDeleteDeck()
{
if (active_lines.Count > 0)
{
CollectionPanel.Get().DeleteDeck(active_lines[GetCurrIndex()].GetUserDeck().tid);
SetupUserDeckList();
}
}
/// <summary>
/// 当前选中卡组索引
/// </summary>
private int GetCurrIndex()
{
return currIndex - 1;
}
#endregion
#region
// private void SetupUserCardList()
// {
// foreach (var line in card_pool)
// line.ResetLine();
//
// card_lines.Clear();
//
// for (int i = 0; i < active_lines[GetCurrIndex()].GetUserDeck().cards.Length; i++)
// {
// DeckLine line = card_pool[i];
// }
// }
// private CardData GetCardData(string id)
// {
// CardData card = CardData.Get();
// return null;
// }
#endregion
/// <summary>
/// 打开预设面板
/// </summary>
@@ -89,14 +191,13 @@ namespace TcgEngine.UI
hide_panel.Hide();
}
private void OnSelectDeck(DeckLine line)
{
}
public override void Show(bool instant = false)
{
base.Show(instant);
SetupUserDeckList();
preset_lineup.Hide();
hide_panel.Hide();
}