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);
	}
示例#2
0
    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);
    }
示例#3
0
    //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]);
    }
示例#4
0
 public static T Choose <T>(this List <T> list, float[] weights)
 {
     return(list[RandomF.WeightedChoose(weights)]);
 }