/// <summary>
    /// Handle process about release balloon
    /// </summary>
    /// <param name="isPlayerBalloon"></param>
    /// <returns>Released balloon successfully?</returns>
    private bool ReleaseBalloon(bool isPlayerBalloon)
    {
        if (isPlayerBalloon)
        {
            if (PlayerBalloon.State == Balloon.BalloonStatus.Normal)
            {
                return(false);
            }

            AudioManager.Instance.Play("EmitBalloon");
            playerBalloonIndex++;
            PlayerBalloon.MoveAway();
            PlayerReleasedBalloons.Add(PlayerBalloon);
            PlayerBalloon = null;
        }
        else
        {
            if (rivalBalloon.State == Balloon.BalloonStatus.Normal)
            {
                return(false);
            }

            AudioManager.Instance.Play("EmitBalloon");
            rivalBalloonIndex++;
            rivalBalloon.MoveAway();
            RivalReleasedBalloons.Add(rivalBalloon);
            rivalBalloon = null;
        }

        // Spawn balloon
        if (isPlayerBalloon)
        {
            Invoke("SpawnPlayerBalloon", balloonSpawnInterval);
        }
        else
        {
            Invoke("SpawnRivalBalloon", balloonSpawnInterval);
        }

        return(true);
    }
//======================================================================================
// Private methods
//======================================================================================
    /// <summary>
    /// Calc game player total score and sort balloons by type
    /// </summary>
    private void PrepareData()
    {
        // For-Loop by balloon type and add to list
        for (int i = 0; i < GetEnumCount <Balloon.BalloonType>(); i++)
        {
            var type = GetEnumByIndex <Balloon.BalloonType>(i);
            SortedPlayerReleasedBalloons.Add(PlayerReleasedBalloons.FindAll(
                                                 x => x.PresentBallonType == type));
            SortedRivalReleasedBalloons.Add(RivalReleasedBalloons.FindAll(
                                                x => x.PresentBallonType == type));
        }

        // Calc total score
        foreach (var i in PlayerReleasedBalloons)
        {
            PlayerScore += i.GetBalloonScore();
        }

        foreach (var i in RivalReleasedBalloons)
        {
            RivalScore += i.GetBalloonScore();
        }

        // Get game result by total score
        if (PlayerScore > RivalScore)
        {
            PresentGameResult = GameResult.PlayerWin;
        }
        else if (PlayerScore == RivalScore)
        {
            PresentGameResult = GameResult.Match;
        }
        else
        {
            PresentGameResult = GameResult.RivalWin;
        }
    }