private IEnumerator SpawnNewToken() { yield return(new WaitForSeconds(5f)); Token selected = null; List <Token> availableTokens = new List <Token>(this.tokens.Count); float totalWeights = 0; while (selected == null) { totalWeights = 0; availableTokens.Clear(); foreach (var token in this.tokens) { if (!token.canBeActivated) { continue; } availableTokens.Add(token); totalWeights += token.weight; } if (availableTokens.Count == 0) { yield return(new WaitForSeconds(0.5f)); continue; } float r = Random.value * totalWeights; float i = 0; foreach (var token in availableTokens) { if (r > i && r <= i + token.weight) { selected = token; break; } else { i += token.weight; } } } selected.Activate(); }
public Token Build() { var token = new Token(_tokenId, _userToken, _deviceOs); if (_active) { token.Activate(); } else { token.Deactivate(); } return(token); }