134 lines
5.7 KiB
C#
134 lines
5.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|