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; // 系统拖拽卡牌时间
|
2025-11-20 00:57:10 +08:00
|
|
|
[SerializeField] private TurnUIManager UIManager;
|
2025-11-20 15:18:11 +08:00
|
|
|
[SerializeField] private CharacterManager1 characterManager;
|
2025-11-18 02:08:07 +08:00
|
|
|
|
|
|
|
|
// ======== private ========
|
2025-11-20 03:39:16 +08:00
|
|
|
private readonly List<Card1> 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;
|
2025-11-20 00:57:10 +08:00
|
|
|
private bool mouseOverHandCardArea = false;
|
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>();
|
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-20 03:39:16 +08:00
|
|
|
public void AddHandCard(Card1 card) => handCardList.Add(card);
|
2025-11-18 18:53:06 +08:00
|
|
|
public int GetHandCardCount() => handCardList.Count;
|
2025-11-18 19:22:47 +08:00
|
|
|
public void FlushHandCard() => handCardList.Clear();
|
2025-11-20 03:39:16 +08:00
|
|
|
public Card1 GetHandCard(int index) => handCardList[index];
|
2025-11-18 18:53:06 +08:00
|
|
|
|
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;
|
2025-11-20 00:57:10 +08:00
|
|
|
public void SetMouseOverHandCardArea(bool value) => mouseOverHandCardArea = value;
|
|
|
|
|
public bool GetMouseOverHandCardArea() => mouseOverHandCardArea;
|
2025-11-18 22:26:13 +08:00
|
|
|
|
|
|
|
|
private void EnterSelfTurn() // 进入回合
|
|
|
|
|
{
|
|
|
|
|
SetState(TURN_OS_STATE.ENTER_SELF_TURN);
|
2025-11-20 00:57:10 +08:00
|
|
|
characterManager.MathWorldPositionPoint();
|
|
|
|
|
characterManager.RenderCharacterSprite();
|
|
|
|
|
characterManager.RenderEnemySprite();
|
2025-11-18 22:26:13 +08:00
|
|
|
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
|
|
|
}
|