切换牌组封面
This commit is contained in:
@@ -128,6 +128,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
cover: {fileID: 2493374532469886071}
|
||||
currentCover: {fileID: 9089188273504675539}
|
||||
coverName:
|
||||
--- !u!1 &7551866968519781467
|
||||
GameObject:
|
||||
@@ -140,6 +141,7 @@ GameObject:
|
||||
- component: {fileID: 7904478404613084626}
|
||||
- component: {fileID: 6541233294276703343}
|
||||
- component: {fileID: 2493374532469886071}
|
||||
- component: {fileID: 2155988268365146913}
|
||||
m_Layer: 5
|
||||
m_Name: Cover
|
||||
m_TagString: Untagged
|
||||
@@ -205,3 +207,47 @@ MonoBehaviour:
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &2155988268365146913
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7551866968519781467}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 2493374532469886071}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
|
||||
@@ -678,14 +678,14 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: a983e14bd852ed04c8139d01f5db1451, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
image: {fileID: 0}
|
||||
image: {fileID: 1528609386195773855}
|
||||
frame: {fileID: 0}
|
||||
title: {fileID: 158878364}
|
||||
value: {fileID: 1226868306}
|
||||
cost: {fileID: 0}
|
||||
delete_btn: {fileID: 2044069777743292366}
|
||||
changeCover_btn: {fileID: 8443272443930128952}
|
||||
click_audio: {fileID: 8300000, guid: ee596874b52e5a0419b0953e40365942, type: 3}
|
||||
click_audio: {fileID: 0}
|
||||
disabled_mat: {fileID: 0}
|
||||
default_mat: {fileID: 0}
|
||||
--- !u!1 &7544422736791466863
|
||||
@@ -727,7 +727,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 46.09, y: -23.3}
|
||||
m_AnchoredPosition: {x: 46.089996, y: -23.3}
|
||||
m_SizeDelta: {x: 92.17, y: 34.65}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1353208218199476232
|
||||
|
||||
@@ -6403,7 +6403,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 1, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: -321.14996, y: -60.669006}
|
||||
m_AnchoredPosition: {x: -321.1499, y: -60.668945}
|
||||
m_SizeDelta: {x: 642.33, y: 95.84}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &260969709
|
||||
@@ -14025,7 +14025,7 @@ CanvasGroup:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 706214460}
|
||||
m_Enabled: 1
|
||||
m_Alpha: 1
|
||||
m_Alpha: 0
|
||||
m_Interactable: 1
|
||||
m_BlocksRaycasts: 1
|
||||
m_IgnoreParentGroups: 0
|
||||
@@ -14459,6 +14459,82 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 721100471}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &721971466
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 721971469}
|
||||
- component: {fileID: 721971468}
|
||||
- component: {fileID: 721971467}
|
||||
m_Layer: 5
|
||||
m_Name: ClickBlocker
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &721971467
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 721971466}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
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
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!222 &721971468
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 721971466}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!224 &721971469
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 721971466}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2036228772}
|
||||
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: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &723885554
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -34515,11 +34591,6 @@ PrefabInstance:
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 396921783056413286}
|
||||
m_Modifications:
|
||||
- target: {fileID: 5314986856841044077, guid: 34ad38a1f19e9cb4ca76806cc3001cbe,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 46.089996
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7172856987813669151, guid: 34ad38a1f19e9cb4ca76806cc3001cbe,
|
||||
type: 3}
|
||||
propertyPath: m_Name
|
||||
@@ -40695,13 +40766,14 @@ RectTransform:
|
||||
m_Children:
|
||||
- {fileID: 565252715}
|
||||
- {fileID: 535771638}
|
||||
- {fileID: 721971469}
|
||||
m_Father: {fileID: 396921783062070325}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
m_AnchoredPosition: {x: -256, y: 0}
|
||||
m_SizeDelta: {x: 512, y: 1080}
|
||||
m_AnchoredPosition: {x: -254.16, y: 0}
|
||||
m_SizeDelta: {x: 508.32, y: 1080}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2036228773
|
||||
MonoBehaviour:
|
||||
@@ -40720,6 +40792,16 @@ MonoBehaviour:
|
||||
content: {fileID: 894615851}
|
||||
coverPrefab: {fileID: 6063977752708943095, guid: 210bbc8613da67c40b6e8abe757bf0a0,
|
||||
type: 3}
|
||||
clickBlocker: {fileID: 721971467}
|
||||
udeck:
|
||||
tid:
|
||||
title:
|
||||
cover:
|
||||
hero:
|
||||
tid:
|
||||
variant:
|
||||
quantity: 1
|
||||
cards: []
|
||||
--- !u!225 &2036228774
|
||||
CanvasGroup:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -45201,7 +45283,7 @@ CanvasGroup:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 396921782448154705}
|
||||
m_Enabled: 1
|
||||
m_Alpha: 0
|
||||
m_Alpha: 1
|
||||
m_Interactable: 1
|
||||
m_BlocksRaycasts: 1
|
||||
m_IgnoreParentGroups: 0
|
||||
|
||||
@@ -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