MOD!
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Continentis.MainGame.Card;
|
||||
using NUnit.Framework;
|
||||
using TMPro;
|
||||
using UniRx;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Continentis.MainGame.UI
|
||||
{
|
||||
public class CustomCardSelectionInterface : WaitableUIElement
|
||||
{
|
||||
public string title;
|
||||
public int maximumSelection;
|
||||
public bool isForcedMaximum;
|
||||
|
||||
public CanvasGroup canvasGroup;
|
||||
public TMP_Text titleText;
|
||||
public RectTransform selectionContainer;
|
||||
public RectTransform playingCardContainer;
|
||||
public Button confirmButton;
|
||||
|
||||
public CardInstance playingCard;
|
||||
public List<CardInstance> cardsToSelect;
|
||||
public List<CardInstance> selectedCards;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
}
|
||||
|
||||
public override void Show()
|
||||
{
|
||||
base.Show();
|
||||
canvasGroup.alpha = 1;
|
||||
canvasGroup.interactable = true;
|
||||
canvasGroup.blocksRaycasts = true;
|
||||
selectedCards.Clear();
|
||||
confirmButton.interactable = !isForcedMaximum;
|
||||
}
|
||||
|
||||
public void Setup(string title, CardInstance playingCard, List<CardInstance> cardsToSelect,
|
||||
int maxSelection, bool forcedMaximum = false)
|
||||
{
|
||||
this.title = title;
|
||||
this.maximumSelection = maxSelection;
|
||||
this.isForcedMaximum = forcedMaximum;
|
||||
this.titleText.text = title;
|
||||
|
||||
this.playingCard = playingCard;
|
||||
CombatUIManager.Instance.combatMainPage.Pile(playingCard.cardLocation.pileName).RemoveCard(playingCard.handCardView);
|
||||
playingCard.handCardView.transform.SetParent(playingCardContainer, false);
|
||||
playingCard.handCardView.transform.localPosition = Vector3.zero;
|
||||
playingCard.handCardView.isOccupied = true;
|
||||
|
||||
this.cardsToSelect = cardsToSelect;
|
||||
this.selectedCards = new List<CardInstance>();
|
||||
foreach (CardInstance card in this.cardsToSelect)
|
||||
{
|
||||
Debug.Log($"Card to select: {card.cardLogic.contentSubmodule.cardName} from {card.cardLocation.pileName}");
|
||||
CombatUIManager.Instance.combatMainPage.Pile(card.cardLocation.pileName).RemoveCard(card.handCardView);
|
||||
card.handCardView.transform.SetParent(selectionContainer, false);
|
||||
card.handCardView.transform.localScale = Vector3.one;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Hide()
|
||||
{
|
||||
base.Hide();
|
||||
canvasGroup.alpha = 0;
|
||||
canvasGroup.interactable = false;
|
||||
canvasGroup.blocksRaycasts = false;
|
||||
}
|
||||
|
||||
public override IObservable<Unit> OnConfirm()
|
||||
{
|
||||
return confirmButton.OnClickAsObservable().First().Do(_ => EndSelection()).AsUnitObservable();
|
||||
}
|
||||
|
||||
public void Select(HandCardView cardView)
|
||||
{
|
||||
if (selectedCards.Contains(cardView.cardInstance))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (maximumSelection > 0 && selectedCards.Count >= maximumSelection)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
selectedCards.Add(cardView.cardInstance);
|
||||
cardView.EnableSelectShadow();
|
||||
if (isForcedMaximum)
|
||||
{
|
||||
confirmButton.interactable = CheckNoMoreAvailable() || selectedCards.Count == maximumSelection;
|
||||
}
|
||||
}
|
||||
|
||||
public void Deselect(HandCardView cardView)
|
||||
{
|
||||
selectedCards.Remove(cardView.cardInstance);
|
||||
cardView.DisableSelectShadow();
|
||||
if (isForcedMaximum)
|
||||
{
|
||||
confirmButton.interactable = CheckNoMoreAvailable() || selectedCards.Count == maximumSelection;
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckNoMoreAvailable()
|
||||
{
|
||||
return cardsToSelect.Count < maximumSelection;
|
||||
}
|
||||
|
||||
public void EndSelection()
|
||||
{
|
||||
//Playing Card回归原位
|
||||
PileBase playingCardPile = CombatUIManager.Instance.combatMainPage.Pile(playingCard.cardLocation.pileName);
|
||||
playingCardPile.AddCard(playingCard.handCardView);
|
||||
playingCard.handCardView.transform.SetParent(playingCardPile.rectTransform, false);
|
||||
playingCard.handCardView.transform.SetSiblingIndex(playingCard.cardLocation.index);
|
||||
playingCard.handCardView.isOccupied = false;
|
||||
|
||||
//CardsToSelect回归原位
|
||||
foreach (CardInstance card in cardsToSelect)
|
||||
{
|
||||
CardLocation location = card.cardLocation;
|
||||
PileBase uiPile = CombatUIManager.Instance.combatMainPage.Pile(location.pileName);
|
||||
HandCardView handCardView = card.handCardView;
|
||||
uiPile.AddCard(handCardView);
|
||||
handCardView.transform.SetParent(uiPile.rectTransform, false);
|
||||
handCardView.transform.SetSiblingIndex(location.index);
|
||||
handCardView.DisableSelectShadow(true);
|
||||
|
||||
if (location.pileName != "Hand")
|
||||
{
|
||||
card.handCardView.transform.localScale = Vector3.zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user