private IEnumerator ExecuteBust()
    {
        IsGameOver = true;
        yield return(new WaitForSeconds(0.5f));

        OnBust();
        ChipContainer.TakeChips();
    }
    private IEnumerator ExecutePush()
    {
        IsGameOver = true;
        yield return(new WaitForSeconds(0.5f));

        OnPush();
        Money += betValue;
        ChipContainer.ReturnChips();
    }
    private void Update()
    {
        ChipContainer.Update();

        if (IsGameOver || isPlayersTurn)
        {
            return;
        }

        dealerHitTimer -= Time.deltaTime;
        if (dealerHitTimer <= 0)
        {
            waitBeforeNextDealerHit = false;
        }

        if (waitBeforeNextDealerHit)
        {
            return;
        }
        if (dealerCardStack.Value.NumberValue < 17)
        {
            DealerHit(1, false);
            WaitBeforeNextDealerHit();
        }
        else if (dealerCardStack.Value.NumberValue == 17 && mustHitOnSoftAce && dealerCardStack.ContainsAny(CardValue.Ace))
        {
            DealerHit(1, false);
            WaitBeforeNextDealerHit();
        }
        else
        {
            if (dealerCardStack.HasBust && playerCardStack.HasBust ||
                dealerCardStack.Value.NumberValue > playerCardStack.Value.NumberValue && !dealerCardStack.HasBust ||
                dealerCardStack.HasNaturalBlackJack && playerCardStack.HasThreeOrMoreBlackJack)
            {
                StartCoroutine(ExecuteBust());
            }
            else if (dealerCardStack.Value.NumberValue == playerCardStack.Value.NumberValue)
            {
                StartCoroutine(ExecutePush());
            }
            else if (playerCardStack.Value.NumberValue > dealerCardStack.Value.NumberValue &&
                     !playerCardStack.HasBust || playerCardStack.Value.NumberValue < dealerCardStack.Value.NumberValue && dealerCardStack.HasBust ||
                     PlayerCardStack.HasNaturalBlackJack && dealerCardStack.HasThreeOrMoreBlackJack)
            {
                StartCoroutine(ExecuteWon());
            }
        }
    }
    public void StartGame()
    {
        ChipContainer.Initialize();

        IsGameOver = false;

        isPlayersTurn  = true;
        isFirstHit     = true;
        IsBetFinalized = false;
        IsPaused       = false;

        BetValue      = 0;
        BetChipsCount = 0;

        OnStarted();
    }
    private IEnumerator ExecuteWon()
    {
        IsGameOver = true;
        yield return(new WaitForSeconds(0.5f));

        OnWon();
        if (playerCardStack.HasNaturalBlackJack)
        {
            Money += Mathf.RoundToInt(1.5f * betValue) + betValue;
        }
        else
        {
            Money += betValue * 2;
        }

        ChipContainer.ReturnChips();
    }
 public Instruction(Bot bot, ChipContainer lowDestination, ChipContainer highDestination)
 {
     Bot             = bot;
     LowDestination  = lowDestination;
     HighDestination = highDestination;
 }