public RandomFlockSpawner(RandomPresence presence, IRandomFlockSelector randomFlockSelector) { _presence = presence; _randomFlockConfiguration = randomFlockSelector.SelectRandomFlockByPresence(presence); _spawnTimer = new TimeTracker(_randomFlockConfiguration.RespawnTime); _presence.Log($"next random spawn for flock:{_randomFlockConfiguration.ID} {_randomFlockConfiguration.Name} {DateTime.Now}{_randomFlockConfiguration.RespawnTime}"); }
public IFlockConfiguration SelectRandomFlockByPresence(RandomPresence presence) { var flockInfos = _randomFlockReader.GetByPresence(presence); var sumRate = flockInfos.Sum(r => r.rate); var minRate = 0.0; var chance = FastRandom.NextDouble(); foreach (var flockRate in flockInfos) { var rate = flockRate.rate / sumRate; var maxRate = rate + minRate; if (minRate < chance && chance <= maxRate) { return(presence.FlockConfigurationRepository.Get(flockRate.flockID)); } minRate += rate; } return(null); }