53 lines
1.5 KiB
C#
53 lines
1.5 KiB
C#
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using Cysharp.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
public class CardContainer : MonoBehaviour
|
|
{
|
|
public ContainerType type;
|
|
public RectTransform cardHolder;
|
|
|
|
public List<CardView> Cards { get; private set; } = new List<CardView>();
|
|
|
|
private void Awake()
|
|
{
|
|
if (cardHolder == null)
|
|
cardHolder = GetComponent<RectTransform>();
|
|
}
|
|
|
|
public void AddCardInstant(CardView card)
|
|
{
|
|
Cards.Add(card);
|
|
card.CurrentContainer = this;
|
|
card.transform.SetParent(cardHolder, false);
|
|
card.transform.localPosition = Vector3.zero;
|
|
card.SetFaceInstant(type != ContainerType.Deck);
|
|
}
|
|
|
|
public async UniTask AddCardAnimatedAsync(CardView card, int siblingIndex = -1, CancellationToken ct = default)
|
|
{
|
|
if (!Cards.Contains(card))
|
|
Cards.Add(card);
|
|
|
|
var shouldBeFaceUp = type != ContainerType.Deck;
|
|
|
|
var moveTask = card.AnimateToTargetAsync(this, siblingIndex, 0.3f, ct);
|
|
var flipTask = card.FlipAsync(shouldBeFaceUp, 0.25f, ct);
|
|
|
|
await UniTask.WhenAll(moveTask, flipTask);
|
|
SoundManager.Instance?.PlayDrop();
|
|
|
|
SyncListOrderWithHierarchy();
|
|
}
|
|
|
|
public void RemoveCardListReference(CardView card)
|
|
{
|
|
Cards.Remove(card);
|
|
}
|
|
|
|
public void SyncListOrderWithHierarchy()
|
|
{
|
|
Cards.Sort((a, b) => a.transform.GetSiblingIndex().CompareTo(b.transform.GetSiblingIndex()));
|
|
}
|
|
} |