118 lines
4.0 KiB
C#
Raw Normal View History

2025-11-18 18:12:49 +08:00
using System;
2025-11-18 12:56:16 +08:00
using System.Collections.Generic;
2025-11-18 22:26:13 +08:00
using System.Collections;
2025-11-18 02:08:07 +08:00
using UnityEngine;
public class TurnEventManagement : MonoBehaviour
{
// ======== serializeField ========
2025-11-18 16:43:59 +08:00
[SerializeField] private int defaultDeckNumber = 21; // 默认牌组数量
[SerializeField] private int defaultCardNumber = 5; // 默认手牌数量
[SerializeField] private float everyCardDealDuration = 0.25f; // 系统发牌时间
2025-11-18 22:26:13 +08:00
[SerializeField] private float everyCardDropDuration = 0.12f; // 系统弃牌时间
[SerializeField] private float everyCardDragDuration = 0.15f; // 系统拖拽卡牌时间
[SerializeField] private GameObject UIManagerGo;
2025-11-18 02:08:07 +08:00
// ======== private ========
2025-11-18 12:56:16 +08:00
private readonly List<Card> handCardList = new();
2025-11-18 19:22:47 +08:00
private TURN_OS_STATE osState;
2025-11-18 22:26:13 +08:00
private TURN_ACTION_STATE actionState;
private TurnSingleton turnSingleton;
2025-11-18 18:12:49 +08:00
private TurnHandlerDealCard turn_handler_deal_card_component;
2025-11-18 22:26:13 +08:00
private TurnHandlerDropCard turn_handler_drop_card_component;
private TurnUIManager UIManager;
2025-11-18 02:08:07 +08:00
2025-11-18 18:12:49 +08:00
private void Awake()
2025-11-18 02:08:07 +08:00
{
2025-11-18 22:26:13 +08:00
turnSingleton = TurnSingleton.Instance;
2025-11-18 18:12:49 +08:00
turn_handler_deal_card_component = GetComponent<TurnHandlerDealCard>();
2025-11-18 22:26:13 +08:00
turn_handler_drop_card_component = GetComponent<TurnHandlerDropCard>();
UIManager = UIManagerGo.GetComponent<TurnUIManager>();
2025-11-18 02:08:07 +08:00
}
2025-11-18 18:12:49 +08:00
private void Start()
{
2025-11-18 22:26:13 +08:00
EnterSelfTurn();
2025-11-18 18:12:49 +08:00
}
2025-11-18 02:08:07 +08:00
2025-11-18 19:22:47 +08:00
// ************* Public *************
// ============= Hand Card =============
2025-11-18 18:53:06 +08:00
public void AddHandCard(Card card) => handCardList.Add(card);
public int GetHandCardCount() => handCardList.Count;
2025-11-18 19:22:47 +08:00
public void FlushHandCard() => handCardList.Clear();
2025-11-18 18:53:06 +08:00
public Card GetHandCard(int index) => handCardList[index];
2025-11-18 19:22:47 +08:00
// ============= Set State =============
public void SetState(TURN_OS_STATE state) => osState = state;
public TURN_OS_STATE GetState() => osState;
2025-11-18 22:26:13 +08:00
public void SetActionState(TURN_ACTION_STATE state) => actionState = state;
public TURN_ACTION_STATE GetActionState() => actionState;
private void EnterSelfTurn() // 进入回合
{
SetState(TURN_OS_STATE.ENTER_SELF_TURN);
deal_card();
}
2025-11-18 18:53:06 +08:00
2025-11-18 22:26:13 +08:00
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();
}
2025-11-18 19:22:47 +08:00
// ************* Private *************
2025-11-18 18:12:49 +08:00
private void deal_card() // 系统发牌
2025-11-18 02:08:07 +08:00
{
2025-11-18 22:26:13 +08:00
actionState = TURN_ACTION_STATE.DEAL_REQUEST;
2025-11-18 18:53:06 +08:00
turn_handler_deal_card_component.DealCard(
2025-11-18 19:22:47 +08:00
new STRUCT_TURN_OS.LET_OS_DEAL_CARD
2025-11-18 18:12:49 +08:00
{
DECK_CARD_COUNT = defaultDeckNumber,
2025-11-18 22:26:13 +08:00
DEFAULT_HAND_CARD_COUNT = defaultCardNumber,
MOVE_ANIMATION_DURATION = everyCardDealDuration,
DRAG_ANIMATION_DURATION = everyCardDragDuration,
2025-11-18 18:12:49 +08:00
});
2025-11-18 02:08:07 +08:00
}
2025-11-18 22:26:13 +08:00
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();
}
}
2025-11-18 02:08:07 +08:00
}