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; } }
public static float Selector(WeightedItem <TItem> item) { return(item.Weight); }
public void Balance(IEnumerable <WeightedItem <TItem> > source, WeightedItem <TItem> balanceItem, float step, int sourceCount = -1) { }