/// <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); }