Race GetRace(bool player) { if (player && (_raceSettings.PlayerRace != null)) { return(_raceSettings.PlayerRace); } var allRaces = _raceSettings.AllRaces; var raceChances = new List <double>(); foreach (var race in allRaces) { var count = Countries.Count(c => c.Kind.Id == race); raceChances.Add(1 / (2 * count + 1)); } var id = RandUtils.GetItemWithChances(allRaces, raceChances); return(_raceSettings.Get(id)); }