コード例 #1
0
        public void Balance([NotNull] IEnumerable <WeightedItem <TItem> > source,
                            [NotNull] WeightedItem <TItem> balanceItem, float step, int sourceCount = -1)
        {
            if (step == 0)
            {
                return;
            }

            // Уменьшение веса основного обекта.
            balanceItem.Weight -= step;
            if (balanceItem.Weight < _weightedList.Minimum)
            {
                balanceItem.Weight = _weightedList.Minimum;
            }

            // Если количество элементов неизвестно.
            if (sourceCount == -1)
            {
                sourceCount = source.Count();
            }

            // В коллекции содержится только небалансируемый элемент.
            if (sourceCount == 1)
            {
                balanceItem.Weight += step;
                return;
            }

            // Выборка случайного объекта, которому увеличиваем вес.
            var randomPicked = source.Random();

            randomPicked.Weight += step;

            // if(randomPicked == balanceItem)
            //     Debug.LogWarning($"Coincidence {randomPicked.Value.ToString()}");

            if (randomPicked.Weight > _weightedList.Maximum)
            {
                randomPicked.Weight = _weightedList.Maximum;
            }
        }
コード例 #2
0
 public static float Selector(WeightedItem <TItem> item)
 {
     return(item.Weight);
 }
コード例 #3
0
 public void Balance(IEnumerable <WeightedItem <TItem> > source,
                     WeightedItem <TItem> balanceItem, float step, int sourceCount = -1)
 {
 }