예제 #1
0
            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);
        }