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); } }