void SetMaterial() { int index = 0; if (usePerlin) { Vector3 pos = Vector3.Scale(transform.position, fieldScale); pos.x += pos.z; pos.y += pos.z * .5f; float f = Noise(pos.x, pos.y); index = (int)(materials.Length * f * .99999f); } else if (useSeed) { int prevSeed = Random.seed; Random.seed = seed++; if (weights.Length == 0) { index = materials.RandomIndex(); } else { index = RandomF.WeightedChoose(weights); } Random.seed = prevSeed; } else { if (weights.Length == 0) { index = materials.RandomIndex(); } else { index = RandomF.WeightedChoose(weights); } } if (renderer != null) { renderer.material = materials[index]; } foreach (Renderer r in alsoSetThese) { r.material = materials[index]; } Destroy(this); }
public static List <T> Choose <T>(this List <T> list, List <float> weights, int num) { //Debug.Log(list.Count + " : " + weights.Count + " : " + num); if (num >= list.Count) { return(list.Shuffled()); } List <T> stuff = list.Clone(); List <float> weightsCopy = weights.Clone(); List <T> chosen = new List <T>(); for (int i = 0; i < num; i++) { int index = RandomF.WeightedChoose(weightsCopy); //Debug.Log(index); chosen.Add(stuff[index]); stuff.RemoveAt(index); weightsCopy.RemoveAt(index); } return(chosen); }
//Choose an element from an array using weights public static T Choose <T>(this T[] array, float[] weights) { int index = (int)Mathf.Clamp(RandomF.WeightedChoose(weights), 0, array.Length - 1); return(array[index]); }
public static T Choose <T>(this List <T> list, float[] weights) { return(list[RandomF.WeightedChoose(weights)]); }