private void CreateOrDestroyAndSetItems(System.Func <int, int> valueGenerator, System.Func <int, int, float> weightGenerator) { if (_selectedItemPanel != null) { _selectedItemPanel.selected = false; } while (_itemPanels.Count < quantityOfItems) { WeightedShuffleItemPanel itemPanel = Instantiate(weightedShuffleItemPrefab); itemPanel.transform.SetParent(itemsPanel, false); _itemPanels.Add(itemPanel); } while (_itemPanels.Count > quantityOfItems) { Destroy(_itemPanels[_itemPanels.Count - 1].gameObject); _itemPanels.RemoveAt(_itemPanels.Count - 1); } _items.Clear(); for (int i = 0; i < _itemPanels.Count; ++i) { int value = valueGenerator(i); float weight = weightGenerator(i, value); WeightedShuffleItemPanel itemPanel = _itemPanels[i]; itemPanel.SetValue(value, _itemPanels.Count); itemPanel.SetWeight(Mathf.RoundToInt(weight), 99); _items.Add(new WeightedValue(value, weight)); } }
public void OnShuffle() { if (_selectedItemPanel != null) { _selectedItemPanel.selected = false; } _random.Shuffle(_items); for (int i = 0; i < _itemPanels.Count; ++i) { WeightedShuffleItemPanel itemPanel = _itemPanels[i]; itemPanel.SetValue(_items[i].value, _itemPanels.Count); itemPanel.SetWeight(Mathf.RoundToInt(_items[i].weight), 99); } }
private IEnumerator SelectRandomItem() { while (true) { WeightedShuffleItemPanel itemPanel = _itemPanels.RandomElement(_random); if (itemPanel != _selectedItemPanel) { if (_selectedItemPanel != null) { _selectedItemPanel.selected = false; } _selectedItemPanel = itemPanel; _selectedItemPanel.selected = true; } yield return(Delay()); } }
private IEnumerator SelectWeightedRandomItem() { while (true) { int index = _random.WeightedIndex(_items.Count, (int i) => _items[i].weight); WeightedShuffleItemPanel itemPanel = _itemPanels[index]; if (itemPanel != _selectedItemPanel) { if (_selectedItemPanel != null) { _selectedItemPanel.selected = false; } _selectedItemPanel = itemPanel; _selectedItemPanel.selected = true; } yield return(Delay()); } }