using System; using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; public class TurnManager : MonoBehaviour { // ======== serializeField ======== [SerializeField] private List playerCharacterGo; // 玩家队伍列表(应该传入5个角色), 暂时只传3个 [SerializeField] private int defaultHandCardNumber = 5; // 默认手牌数量 [SerializeField] private float cardDealDuration = 0.25f; // 系统发牌动画时间 [SerializeField] private float cardDragDuration = 0.25f; // 每张卡牌拖拽动画时间 [SerializeField] private float cardDropDuration = 0.25f; // 系统弃牌动画时间 [SerializeField] private Transform cardDeckContainer; [SerializeField] private Transform cardHandContainer; [SerializeField] private Transform characterContainer; [SerializeField] private RectTransform dropCardUI; // ======== private ======== private TurnManagerSingleton turnManagerSingleton; [SerializeField] private List cardDeckList; // 牌组 private readonly List cardPileList = new(); // 弃牌堆 private TurnManagerStateEnum turnManagerState; // 状态机 private TurnCharacterManager characterManager; private TurnCardManager cardManager; private TurnUIManager uiManager; public enum TurnManagerStateEnum { WAIT = 0, SETUP_STATE = 1, SELF_STATE_START = 2, SELF_STATE_STAY = 3, SELF_STATE_END = 4, ENEMY_STATE_START, } private void Start() { turnManagerSingleton = TurnManagerSingleton.Instance; cardManager = GetComponent(); characterManager = GetComponent(); uiManager = GetComponent(); TurnManagerEvent.OnTurnManagerStaySelfTurn += TurnStaySelfState; TurnManagerEvent.OnTurnManagerEndSelfTurn += TurnEndSelfState; TurnEnterSetupState(); } public TurnManagerStateEnum GetTurnManagerState() => turnManagerState; private void TurnEnterSetupState() // 进入设置状态 { turnManagerState = TurnManagerStateEnum.SETUP_STATE; if (turnManagerSingleton.GetNeedDebugLog()) turnManagerSingleton.PrintMsg("TurnManager", "状态切换", "进入设置状态"); cardDeckList?.Clear(); cardPileList?.Clear(); characterManager.SetupCharacterManager(playerCharacterGo, cardDeckContainer, characterContainer); cardDeckList = characterManager.RenderCharacterSpriteReturnCardList(); cardManager.SetupCardManager(cardDealDuration, cardHandContainer, cardDragDuration, dropCardUI, cardDropDuration); // cardManager.PlayAnimationShuffleCardToDeck(cardDealDuration); TurnEnterSelfState(); } public Card TakeOutOneCard() { Card card = cardDeckList[UnityEngine.Random.Range(0, cardDeckList.Count)]; cardDeckList.Remove(card); return card; } public void DropOutOneCard(Card card) => cardPileList.Add(card); private void TurnEnterSelfState() // 进入我方回合 { if (!turnManagerSingleton.CompareManagerState(TurnManagerStateEnum.SETUP_STATE)) return; if (turnManagerSingleton.GetNeedDebugLog()) turnManagerSingleton.PrintMsg("TurnManager", "状态切换", "进入我方回合"); turnManagerState = TurnManagerStateEnum.SELF_STATE_START; cardManager.TakeCard(6); } private void TurnStaySelfState() // 停留我方回合 { if (!turnManagerSingleton.CompareManagerState(TurnManagerStateEnum.SELF_STATE_START)) return; if (turnManagerSingleton.GetNeedDebugLog()) turnManagerSingleton.PrintMsg("TurnManager", "状态切换", "停留我方回合"); turnManagerState = TurnManagerStateEnum.SELF_STATE_STAY; } private void TurnEndSelfState() // 结束我方回合 { if (!turnManagerSingleton.CompareManagerState(TurnManagerStateEnum.SELF_STATE_STAY)) return; if (!cardManager.GetCardManagerStateIsWait()) return; if (turnManagerSingleton.GetNeedDebugLog()) turnManagerSingleton.PrintMsg("TurnManager", "状态切换", "结束我方回合"); turnManagerState = TurnManagerStateEnum.SELF_STATE_END; cardManager.DropCardAllFromHand(); } }