using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; public enum HandControlsPosition { Top, Bottom, } public class HandControls where BaseCardT : BaseCard { public delegate void CardClickedAction(BaseCardT card); public event CardClickedAction OnCardClicked; private GameObject uiCanvas; private GameObject cardPrefab; private HandControlsPosition position; private List hand; private List cardsInHandUIs; private int insightLevel; public HandControls(GameObject uiCanvas, GameObject cardPrefab, HandControlsPosition position, int insightLevel) { this.uiCanvas = uiCanvas; this.cardPrefab = cardPrefab; this.position = position; this.insightLevel = insightLevel; } public void SetHand(List hand) { this.hand = hand; DrawHand(); } private Vector3 CalculateHandCardPosition(int index, int count) { const int SPACING = 8; const int DELTA = BattleCardPrefabConstants.CARD_WIDTH + SPACING; float x = Screen.width * 0.5f - DELTA / 2 * (count - 1) + DELTA * index; float y = (this.position == HandControlsPosition.Bottom ? SPACING + BattleCardPrefabConstants.CARD_HEIGHT / 2 : Screen.height - SPACING - BattleCardPrefabConstants.CARD_HEIGHT / 2); return new Vector3(x, y, 0); } public int InsightLevel { get => this.insightLevel; set { this.insightLevel = value; DrawHand(); } } private void DrawHand() { if (this.hand == null) { return; } if (this.cardsInHandUIs != null) { foreach (GameObject cardInHandUI in this.cardsInHandUIs) { GameObject.Destroy(cardInHandUI); } } this.cardsInHandUIs = new List(); for (int i = 0; i < this.hand.Count; i++) { BaseCardT card = this.hand[i]; GameObject cardUI = GameObject.Instantiate(this.cardPrefab, this.uiCanvas.transform); this.cardsInHandUIs.Add(cardUI); cardUI.transform.position = CalculateHandCardPosition(i, this.hand.Count); CardUI cardUIScript = cardUI.GetComponent(); if (i < this.insightLevel) { cardUIScript.Init(card); } else { cardUIScript.InitHidden(); } int cardIndex = i; cardUI.GetComponent