using CodeJay.Enum; using UnityEngine; public partial class GamePanel : MonoBehaviour { public enum EBringGetableCardState { Start, MoveCards, SortCards, CheckFloorCardNumber, Complete } internal int _bringGetableIndex = 0; private EBringGetableCardState _bringGetableState; internal void InitBringGetableData() { _bringGetableIndex = 0; _bringGetableState = EBringGetableCardState.Start; } private void BringGetableStateMachine() { switch (_bringGetableState) { case EBringGetableCardState.Start: if (PlayerTurn) SortPlayerCards(); _bringGetableState = EBringGetableCardState.MoveCards; _bringGetableIndex = 0; break; case EBringGetableCardState.MoveCards: if (_lstAvailableCardTypes.Count <= 0) { _lstAvailableCardTypes.Clear(); _delay = 0; _bringGetableIndex = 0; _bringGetableState = EBringGetableCardState.SortCards; } else { if (_bringGetableIndex < _lstAvailableCardTypes.Count) { if (PlayerTurn) { CardSlot slot = GetCardSlot(_lstAvailableCardTypes[_bringGetableIndex]); slot.Move(ECardLocationType.Floor, ECardLocationType.Player_Score, GetRectTransformAndModifyContainer(ECardLocationType.Player_Score, _lstAvailableCardTypes[_bringGetableIndex])); DataMove(ECardLocationType.Floor, _lstAvailableCardTypes[_bringGetableIndex]); GameManager.Sound.PlaySFX(ESFXType.CardMove_1); if (_lstAvailableCardTypes[_bringGetableIndex] == ECardType.Bonus_1 || _lstAvailableCardTypes[_bringGetableIndex] == ECardType.Bonus_2 || _lstAvailableCardTypes[_bringGetableIndex] == ECardType.Bonus_3) { BringOtherPlayersPeeCard(1, PlayerTurn); } _delay = 0.1f; } else { CardSlot slot = GetCardSlot(_lstAvailableCardTypes[_bringGetableIndex]); slot.Move(ECardLocationType.Floor, ECardLocationType.AI_Score, GetRectTransformAndModifyContainer(ECardLocationType.AI_Score, _lstAvailableCardTypes[_bringGetableIndex])); DataMove(ECardLocationType.Floor, _lstAvailableCardTypes[_bringGetableIndex]); GameManager.Sound.PlaySFX(ESFXType.CardMove_1); if (_lstAvailableCardTypes[_bringGetableIndex] == ECardType.Bonus_1 || _lstAvailableCardTypes[_bringGetableIndex] == ECardType.Bonus_2 || _lstAvailableCardTypes[_bringGetableIndex] == ECardType.Bonus_3) { BringOtherPlayersPeeCard(1, PlayerTurn); } _delay = 0.1f; } if (_dicReservedBonusCard.ContainsKey(_lstAvailableCardTypes[_bringGetableIndex])) _dicReservedBonusCard.Remove(_lstAvailableCardTypes[_bringGetableIndex]); _bringGetableIndex++; } else { _lstAvailableCardTypes.Clear(); _delay = 0.25f; _bringGetableState = EBringGetableCardState.SortCards; _bringGetableIndex = 0; } } break; case EBringGetableCardState.SortCards: { SortFloorCards(); _delay = 0.25f; _bringGetableState = EBringGetableCardState.CheckFloorCardNumber; } break; case EBringGetableCardState.CheckFloorCardNumber: { int floorCardNum = GetMatchedCardSlotNumber(ECardLocationType.Floor); if (floorCardNum <= 0) { if (PlayerTurn) { if (GetMatchedCardSlotNumber(ECardLocationType.Player_Hand) > 0) { BringOtherPlayersPeeCard(1, PlayerTurn); _delay = EffectPanel.Direct(EEffectDirectType.Clean, PlayerTurn); } } else { if (GetMatchedCardSlotNumber(ECardLocationType.AI_Hand) > 0) { BringOtherPlayersPeeCard(1, PlayerTurn); _delay = EffectPanel.Direct(EEffectDirectType.Clean, PlayerTurn); } } } _bringGetableState = EBringGetableCardState.Complete; } break; case EBringGetableCardState.Complete: { _lstAvailableCardTypes.Clear(); InitBringGetableData(); CurrentCoroutineType = EGameWorkFlowType.CheckCombination; GameManager.Event.InvokeEvent(EEventType.OnSynchronizeScore); } break; } } }