RandomGFGoStop/Assets/Scripts/UI/GamePanel/GamePanel_CheckMathAfterDis...

210 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
// <20><><EFBFBD><EFBFBD> <20><> 4<><34>: <20>ڻ<EFBFBD> / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (matchedFloorCards.Count == 4)
{
GameManager.Sound.PlaySFX(ESFXType.Card_Hit);
if (_useBomb)
{
_checkMatchedDiscardState = ECheckDiscardMatchedState.Complete;
_useBomb = false;
}
else
{
if (_dicBbug_State.ContainsKey(_discardSlot.MonthType))
{
// <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾ <20>ߴٸ<DFB4>
if (_dicBbug_State[_discardSlot.MonthType] == EBbugState.Player)
{
_checkDiscardEffectType = PlayerTurn ? EEffectDirectType.GetBbug_Own : EEffectDirectType.GetBbug;
_checkIndex = PlayerTurn ? 2 : 1;
}
// <20><><EFBFBD><EFBFBD> AI<41><49> <20>ߴٸ<DFB4>
else if (_dicBbug_State[_discardSlot.MonthType] == EBbugState.AI)
{
_checkDiscardEffectType = PlayerTurn ? EEffectDirectType.GetBbug : EEffectDirectType.GetBbug_Own;
_checkIndex = PlayerTurn ? 1 : 2;
}
// ī<><20><><EFBFBD><EFBFBD> <20><> 4<><34><EFBFBD><EFBFBD> <20>Ȱ<EFBFBD><C8B0>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
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);
// <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD>ʽ<EFBFBD>ī<EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
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;
}
}
// <20><><EFBFBD><EFBFBD> <20><> 3<><33>: ī<><C4AB> <20><><EFBFBD><EFBFBD>
else if (matchedFloorCards.Count == 3)
{
GameManager.Sound.PlaySFX(ESFXType.Card_Hit);
_delay = (CardSlot.TWEEN_DURATION * 1.25f) / GameSpeed;
_checkMatchedDiscardState = ECheckDiscardMatchedState.CardSelectLogic;
}
// <20><><EFBFBD><EFBFBD> <20><> 2<><32>: <20>ٴ<EFBFBD><D9B4>п<EFBFBD> <20><>ġ<EFBFBD><C4A1>.
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;
}
// <20>ٴ<EFBFBD><D9B4>п<EFBFBD> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
else if (matchedFloorCards.Count == 1)
{
GameManager.Sound.PlaySFX(ESFXType.Card_NoHit);
_checkMatchedDiscardState = ECheckDiscardMatchedState.Complete;
}
else
{
// _discardSlot<6F><74> Null<6C><6C> <20><><EFBFBD><EFBFBD> <20>п<EFBFBD><D0BF><EFBFBD> Flip ī<><20><><EFBFBD><EFBFBD> <20><> <20>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD>.
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);
// <20><><EFBFBD>ǰ<EFBFBD> <20>ƴϰ<C6B4> <20><><EFBFBD> ī<><20><> <20><> '<27><>' <20><> <20><>
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<FloorCardSelectPopup>(EPopupType.FloorCardSelectPopup).SetData(leftCard, rightCard, this.CardSelectCallback_Discard);
_checkMatchedDiscardState = ECheckDiscardMatchedState.WaitForCardSelect;
_delay = 0.2f;
}
else
{
GameManager.UI.ShowNStackPopup<WaitForAIBehaviourPopup>(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);
}
}