/// <summary>
    /// Randomly selects an influencer from list of players who are yet to have all their turns
    /// </summary>
    private IEnumerator SelectInfluencer_()
    {
        // briefly wait
        yield return(new WaitForSeconds(3));

        // clear round counts
        foreach (var pl in _players)
        {
            pl.NewRound();
        }

        ResetSpriteImage_();

        // show trending panel
        TrendingPanel.SetActive(true);

        // flick through each player
        for (int i = 0; i < 50; i++)
        {
            TxtTrendingMessage.text = "@" + _players[i % _players.Count].GetPlayerName();
            ImgInfluencer.sprite    = CharacterSprites[_players[i % _players.Count].GetCharacterIndex()];
            ImgInfluencerBG.color   = ColourFetcher.GetColour(i % _players.Count);
            yield return(new WaitForSeconds(0.1f));
        }

        // ensure the list is empty
        _playersInZone.Clear();

        // pick a random player
        var r = UnityEngine.Random.Range(0, _remainingTurns.Count);

        _currentInfluencer = _players[_remainingTurns[r]];
        _remainingTurns.RemoveAt(r);

        // display selection
        TxtTrendingMessage.text = "@" + _currentInfluencer.GetPlayerName();
        ImgInfluencer.sprite    = CharacterSprites[_currentInfluencer.GetCharacterIndex()];
        ImgInfluencerBG.color   = ColourFetcher.GetColour(_currentInfluencer.GetPlayerIndex());

        // show zone
        InfluencerZone.gameObject.SetActive(true);
        InfluencerZone.SetParent(_currentInfluencer.MovementObject());
        InfluencerZone.localPosition = new Vector3(0, 0, 2f);

        // increase size
        StartCoroutine(GrowZone_());

        // start timer
        _turnLimit.StartTimer();

        _turnRunning = true;

        StartCoroutine(CheckZone_());
    }
    /// <summary>
    /// Grows the VIP zone to the specified zone
    /// </summary>
    IEnumerator GrowZone_()
    {
        InfluencerZone.localScale = new Vector3(0, 0, 1f);

        // adjust size to be consistent for all players
        var parentScale = _currentInfluencer.MovementObject().localScale;
        var targetSizeX = ZONE_SIZE / parentScale.x;
        var targetSizeY = ZONE_SIZE / parentScale.y;

        // if BIGGER ZONE power up triggered/pending, increase size
        if (_biggerZone)
        {
            targetSizeX *= ZONE_SIZE_POWERUP;
            targetSizeY *= ZONE_SIZE_POWERUP;
            _biggerZone  = false;
        }
        // if SMALLER ZONE power up triggered/pending, decrease size
        else if (_smallerZone)
        {
            targetSizeX /= ZONE_SIZE_POWERUP;
            targetSizeY /= ZONE_SIZE_POWERUP;
            _smallerZone = false;
        }

        // increase size until target reached
        while ((InfluencerZone.localScale.x < targetSizeX - 0.01f) && (InfluencerZone.localScale.y < targetSizeY - 0.01f))
        {
            var x = Mathf.Lerp(InfluencerZone.localScale.x, targetSizeX, Time.deltaTime * ZONE_GROWTH);
            var y = Mathf.Lerp(InfluencerZone.localScale.y, targetSizeY, Time.deltaTime * ZONE_GROWTH);

            // set size
            InfluencerZone.localScale = new Vector3(x, y, 1f);
            yield return(new WaitForSeconds(0.01f));
        }

        InfluencerZone.localScale = new Vector3(targetSizeX, targetSizeY, 1f);
    }