Example #1
0
    private void UpdateCounting()
    {
        if (ballReachedPins)
        {
            stillnessTimer += Time.deltaTime;
            if (stillnessTimer > STILLNESS_TIMEOUT ||                         // Max time elapsed
                (stillnessTimer > STILLNESS_MIN && pinMaster.AllPinsStill())) // Min time elapsed and all pins are still
            {
                scoreMaster.AddScore(pinMaster.GetFallenPins().Count);
                int[] scores = scoreMaster.GetScores();
                LogScore(scores);

                if (bowlCounter == 20)
                {
                    GameOver();
                }
                else if (bowlCounter >= 18 && scores[bowlCounter] == 10)         // Handle last-frame special cases
                {
                    NextLaunch(true);
                }
                else if (bowlCounter == 19)
                {
                    if (scores[18] == 10 && scores[19] == 0)
                    {
                        NextLaunch(false);
                    }
                    else if (scores[18] + scores[19] == 10)
                    {
                        NextLaunch(true);
                    }
                    else if (scores[18] + scores[19] >= 10)           // Roll 21 awarded
                    {
                        NextLaunch(false);
                    }
                    else
                    {
                        GameOver();
                    }
                }
                else if (bowlCounter % 2 == 0)         // First bowl of frame
                {
                    if (scores[bowlCounter] == 10)
                    {
                        bowlCounter++;
                        scoreMaster.AddScore(0);       // Virtual 0 after strike
                        NextLaunch(true);
                    }
                    else
                    {
                        NextLaunch(false);
                    }
                }
                else         // Second bowl of frame
                {
                    NextLaunch(true);
                }
            }
        }
    }