using System; using System.Collections.Generic; using System.Collections; using UnityEngine; public class TurnEventManagement : MonoBehaviour { // ======== serializeField ======== [SerializeField] private int defaultDeckNumber = 21; // 默认牌组数量 [SerializeField] private int defaultCardNumber = 5; // 默认手牌数量 [SerializeField] private float everyCardDealDuration = 0.25f; // 系统发牌时间 [SerializeField] private float everyCardDropDuration = 0.12f; // 系统弃牌时间 [SerializeField] private float everyCardDragDuration = 0.15f; // 系统拖拽卡牌时间 [SerializeField] private TurnUIManager1 UIManager; [SerializeField] private CharacterManager1 characterManager; // ======== private ======== private readonly List handCardList = new(); private TURN_OS_STATE osState; private TURN_ACTION_STATE actionState; private TurnSingleton turnSingleton; private TurnHandlerDealCard turn_handler_deal_card_component; private TurnHandlerDropCard turn_handler_drop_card_component; private bool mouseOverHandCardArea = false; private void Awake() { turnSingleton = TurnSingleton.Instance; turn_handler_deal_card_component = GetComponent(); turn_handler_drop_card_component = GetComponent(); } private void Start() { EnterSelfTurn(); } // ************* Public ************* // ============= Hand Card ============= public void AddHandCard(Card1 card) => handCardList.Add(card); public int GetHandCardCount() => handCardList.Count; public void FlushHandCard() => handCardList.Clear(); public Card1 GetHandCard(int index) => handCardList[index]; // ============= Set State ============= public void SetState(TURN_OS_STATE state) => osState = state; public TURN_OS_STATE GetState() => osState; public void SetActionState(TURN_ACTION_STATE state) => actionState = state; public TURN_ACTION_STATE GetActionState() => actionState; public void SetMouseOverHandCardArea(bool value) => mouseOverHandCardArea = value; public bool GetMouseOverHandCardArea() => mouseOverHandCardArea; private void EnterSelfTurn() // 进入回合 { SetState(TURN_OS_STATE.ENTER_SELF_TURN); characterManager.MathWorldPositionPoint(); characterManager.RenderCharacterSprite(); characterManager.RenderEnemySprite(); deal_card(); } public void ExitSelfTurn() // 结束回合 { if (!turnSingleton.VerificationSystemStatus(osState, TURN_OS_STATE.STAY_SELF_TURN)) return; if (!turnSingleton.VerificationActionStatus(actionState, TURN_ACTION_STATE.WAIT)) return; SetState(TURN_OS_STATE.EXIT_SELF_TURN); actionState = TURN_ACTION_STATE.DROP_REQUEST; turn_handler_drop_card_component.DropCard(everyCardDropDuration); } public void EnterEnemyTurn() // 进入敌方回合 { SetState(TURN_OS_STATE.ENTER_ENEMY_TURN); UIManager.EnterEnemyTurn(); StayEnemyTurn(); } private void StayEnemyTurn() // 敌方回合 { SetState(TURN_OS_STATE.STAY_ENEMY_TURN); stay_the_enemy_turn(); } private void ExitEnemyTurn() // 退出敌方回合 { if (!turnSingleton.VerificationSystemStatus(osState, TURN_OS_STATE.STAY_ENEMY_TURN)) return; SetState(TURN_OS_STATE.EXIT_ENEMY_TURN); UIManager.ExitEnemyTurn(); EnterSelfTurn(); } // ************* Private ************* private void deal_card() // 系统发牌 { actionState = TURN_ACTION_STATE.DEAL_REQUEST; turn_handler_deal_card_component.DealCard( new STRUCT_TURN_OS.LET_OS_DEAL_CARD { DECK_CARD_COUNT = defaultDeckNumber, DEFAULT_HAND_CARD_COUNT = defaultCardNumber, MOVE_ANIMATION_DURATION = everyCardDealDuration, DRAG_ANIMATION_DURATION = everyCardDragDuration, }); } private void stay_the_enemy_turn() { StartCoroutine(coroutine()); return; IEnumerator coroutine() { for (var i = 0; i < 3; i++) { yield return new WaitForSeconds(1); } UIManager.ExitEnemyTurn(); ExitEnemyTurn(); } } }