73 lines
3.0 KiB
C#
73 lines
3.0 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
public class TurnManager : MonoBehaviour
|
|
{
|
|
// ======== serializeField ========
|
|
[SerializeField] private List<GameObject> playerCharacterGo; // 玩家队伍列表(应该传入5个角色), 暂时只传3个
|
|
[SerializeField] private int defaultHandCardNumber = 5; // 默认手牌数量
|
|
[SerializeField] private float cardDistributeDuration = 0.25f; // 系统发牌动画时间
|
|
[SerializeField] private float cardDragDuration = 0.25f; // 每张卡牌拖拽动画时间
|
|
[SerializeField] private float cardDiscardDuration = 0.25f; // 系统弃牌动画时间
|
|
|
|
|
|
// ======== private ========
|
|
private TurnManagerSingleton turnManagerSingleton;
|
|
[SerializeField] private List<Card> cardDeckList; // 牌组
|
|
private readonly List<Card> cardPileList = new(); // 弃牌堆
|
|
private TurnManagerStateEnum turnManagerState; // 状态机
|
|
private CharacterManager characterManager;
|
|
private CardManager cardManager;
|
|
|
|
public enum TurnManagerStateEnum
|
|
{
|
|
WAIT = 0,
|
|
SETUP_STATE = 1,
|
|
SELF_STATE_START = 2,
|
|
ENEMY_STATE_START = 3,
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
TurnManagerEvent.OnTurnManagerStateEnterSelfTurn += TurnEnterSelfState; // 状态机进入我方回合
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
turnManagerSingleton = TurnManagerSingleton.Instance;
|
|
characterManager = GetComponent<CharacterManager>();
|
|
cardManager = GetComponent<CardManager>();
|
|
TurnEnterSetupState();
|
|
}
|
|
|
|
public TurnManagerStateEnum GetTurnManagerState() => turnManagerState;
|
|
|
|
private void TurnEnterSetupState() // 进入设置状态
|
|
{
|
|
turnManagerState = TurnManagerStateEnum.SETUP_STATE;
|
|
if (turnManagerSingleton.GetNeedDebugLog()) turnManagerSingleton.PrintMsg("TurnManager", "状态切换", "进入设置状态");
|
|
cardDeckList?.Clear();
|
|
cardPileList?.Clear();
|
|
// foreach (var playerCharacter in playerCharacterList) playerCharacter.SetID(playerCharacterList.IndexOf(playerCharacter));
|
|
characterManager.SetupCharacterManager(playerCharacterGo);
|
|
characterManager.MathWorldPositionPoint();
|
|
var (characterOwnedCardTweenList, cardDeck) = characterManager.RenderCharacterSpriteReturnCardTween();
|
|
cardDeckList = cardDeck;
|
|
cardManager.SetupCardManager();
|
|
cardManager.PlayAnimationShuffleCardToDeck(characterOwnedCardTweenList);
|
|
// TurnEnterSelfState();
|
|
}
|
|
|
|
// private Card TakeOutOneCard() => cardDeckList[UnityEngine.Random.Range(0, cardDeckList.Count)];
|
|
|
|
private void TurnEnterSelfState() // 进入我方回合
|
|
{
|
|
if (!turnManagerSingleton.CompareManagerState(TurnManagerStateEnum.SETUP_STATE)) return;
|
|
turnManagerState = TurnManagerStateEnum.SELF_STATE_START;
|
|
if (turnManagerSingleton.GetNeedDebugLog()) turnManagerSingleton.PrintMsg("TurnManager", "状态切换", "进入我方回合");
|
|
cardDeckList = cardManager.TakeFiveCard(cardDeckList, 5);
|
|
}
|
|
} |