using CodeJay.Enum; using UnityEngine; public partial class GamePanel : MonoBehaviour { private enum ECheckDiscardMatchedState { CheckMatchedCardNumber, CardSelectLogic, WaitForCardSelect, Complete } internal int _checkIndex = 0; private ECheckDiscardMatchedState _checkMatchedDiscardState = ECheckDiscardMatchedState.CheckMatchedCardNumber; private EEffectDirectType _checkDiscardEffectType = EEffectDirectType.Max; private void InitCheckMatchedAfterDiscardData() { _checkIndex = 0; _checkMatchedDiscardState = ECheckDiscardMatchedState.CheckMatchedCardNumber; _checkDiscardEffectType = EEffectDirectType.Max; } private void CheckDiscardMatchedStateMachine() { switch (_checkMatchedDiscardState) { case ECheckDiscardMatchedState.CheckMatchedCardNumber: { if (_discardSlot == null) { _checkMatchedDiscardState = ECheckDiscardMatchedState.Complete; break; } var matchedFloorCards = GetMatchedCardSlots(ECardLocationType.Floor, _discardSlot.MonthType); // ���� �� 4��: �ڻ� / ������ if (matchedFloorCards.Count == 4) { GameManager.Sound.PlaySFX(ESFXType.Card_Hit); if (_useBomb) { _checkMatchedDiscardState = ECheckDiscardMatchedState.Complete; _useBomb = false; } else { if (_dicBbug_State.ContainsKey(_discardSlot.MonthType)) { // ���� �÷��̾ �ߴٸ� if (_dicBbug_State[_discardSlot.MonthType] == EBbugState.Player) { _checkDiscardEffectType = PlayerTurn ? EEffectDirectType.GetBbug_Own : EEffectDirectType.GetBbug; _checkIndex = PlayerTurn ? 2 : 1; } // ���� AI�� �ߴٸ� else if (_dicBbug_State[_discardSlot.MonthType] == EBbugState.AI) { _checkDiscardEffectType = PlayerTurn ? EEffectDirectType.GetBbug : EEffectDirectType.GetBbug_Own; _checkIndex = PlayerTurn ? 1 : 2; } // ī�带 ���� �� 4���� �Ȱ��̱� ������ �����̴�. else { LogicalError($"{nameof(CheckDiscardMatchedStateMachine)} Logical Error"); } } else { _checkDiscardEffectType = EEffectDirectType.GetBbug; _checkIndex = 1; } for (int i = 0; i < matchedFloorCards.Count; i++) _lstAvailableCardTypes.Add(matchedFloorCards[i].CardType); // ���� �ִ� ���ʽ�ī�嵵 �����´�. if (_dicReservedBonusCard.ContainsKey(ECardType.Bonus_1)) { if (_dicReservedBonusCard[ECardType.Bonus_1] == _discardSlot.MonthType) _lstAvailableCardTypes.Add(ECardType.Bonus_1); } if (_dicReservedBonusCard.ContainsKey(ECardType.Bonus_2)) { if (_dicReservedBonusCard[ECardType.Bonus_2] == _discardSlot.MonthType) _lstAvailableCardTypes.Add(ECardType.Bonus_2); } if (_dicReservedBonusCard.ContainsKey(ECardType.Bonus_3)) { if (_dicReservedBonusCard[ECardType.Bonus_3] == _discardSlot.MonthType) _lstAvailableCardTypes.Add(ECardType.Bonus_3); } BringOtherPlayersPeeCard(_checkIndex, PlayerTurn); _checkIndex = 0; _delay = EffectPanel.Direct(_checkDiscardEffectType, PlayerTurn); _checkMatchedDiscardState = ECheckDiscardMatchedState.Complete; } } // ���� �� 3��: ī�� ���� else if (matchedFloorCards.Count == 3) { GameManager.Sound.PlaySFX(ESFXType.Card_Hit); _delay = (CardSlot.TWEEN_DURATION * 1.25f) / GameSpeed; _checkMatchedDiscardState = ECheckDiscardMatchedState.CardSelectLogic; } // ���� �� 2��: �ٴ��п� ��ġ��. else if (matchedFloorCards.Count == 2) { GameManager.Sound.PlaySFX(ESFXType.Card_Hit); _lstAvailableCardTypes.Add(matchedFloorCards[0].CardType); _lstAvailableCardTypes.Add(matchedFloorCards[1].CardType); _checkMatchedDiscardState = ECheckDiscardMatchedState.Complete; _delay = 0.05f; } // �ٴ��п� ��ġ���� ����. else if (matchedFloorCards.Count == 1) { GameManager.Sound.PlaySFX(ESFXType.Card_NoHit); _checkMatchedDiscardState = ECheckDiscardMatchedState.Complete; } else { // _discardSlot�� Null�� ���� �п��� Flip ī�带 ���� �� �ۿ� ����. if (_discardSlot != null) LogicalError($"{nameof(CheckDiscardMatchedStateMachine)} Logical Error"); } } break; case ECheckDiscardMatchedState.CardSelectLogic: { var matchedFloorCards = GetMatchedCardSlots(ECardLocationType.Floor, _discardSlot.MonthType); ECardType leftCard = ECardType.Max; ECardType rightCard = ECardType.Max; for (int i = 0; i < matchedFloorCards.Count; i++) { if (matchedFloorCards[i].CardType == _discardSlot.CardType) continue; else { if (leftCard == ECardType.Max) leftCard = matchedFloorCards[i].CardType; else if (rightCard == ECardType.Max) rightCard = matchedFloorCards[i].CardType; else break; } } ECardScoreType leftScoreType = CodeJay.CodeJayUtility.Converter.CardTypeToScoreType(leftCard); ECardScoreType rightScoreType = CodeJay.CodeJayUtility.Converter.CardTypeToScoreType(rightCard); bool isDoublePee_left = CodeJay.CodeJayUtility.Utility.IsDoublePee(leftCard, UseSepYulgget_To_Pee); bool isDoublePee_right = CodeJay.CodeJayUtility.Utility.IsDoublePee(rightCard, UseSepYulgget_To_Pee); // ���ǰ� �ƴϰ� ��� ī�尡 �� �� '��' �� �� if (isDoublePee_left == false && isDoublePee_right == false && leftScoreType == ECardScoreType.Pee && rightScoreType == ECardScoreType.Pee) { CardSelectCallback_Discard(Random.Range(0, 2) == 0 ? leftCard : rightCard); _checkMatchedDiscardState = ECheckDiscardMatchedState.Complete; _delay = 0.2f; } else { if (PlayerTurn) { GameManager.UI.ShowNStackPopup(EPopupType.FloorCardSelectPopup).SetData(leftCard, rightCard, this.CardSelectCallback_Discard); _checkMatchedDiscardState = ECheckDiscardMatchedState.WaitForCardSelect; _delay = 0.2f; } else { GameManager.UI.ShowNStackPopup(EPopupType.WaitForAIBehaviourPopup).SetData(1f); CardSelectCallback_Discard(Random.Range(0, 2) > 0 ? leftCard : rightCard); _delay = 1f; _checkMatchedDiscardState = ECheckDiscardMatchedState.WaitForCardSelect; } } } break; case ECheckDiscardMatchedState.WaitForCardSelect: if (GameManager.UI.IsAnyPopupOpened() == false) { _checkMatchedDiscardState = ECheckDiscardMatchedState.Complete; } break; case ECheckDiscardMatchedState.Complete: { _delay = 0.2f; InitCheckMatchedAfterDiscardData(); CurrentCoroutineType = EGameWorkFlowType.FlipCenterCard; } break; } } private void CardSelectCallback_Discard(ECardType type) { _lstAvailableCardTypes.Add(type); _lstAvailableCardTypes.Add(_discardSlot.CardType); } }