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 Cards { get; private set; } = new List(); private void Awake() { if (cardHolder == null) cardHolder = GetComponent(); } 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())); } }