public static SampledColorGradient2D GenerateRandom(Vector2Int size, int colorAreaCount, int blurRadius)
    {
        SampledColorGradient2D output = new SampledColorGradient2D();

        output.blurRadius = blurRadius;
        output.size       = size;
        output.colors     = new Color[size.x * size.y];
        List <Vector2Int> remainingPositions = new List <Vector2Int>();

        for (int x = 0; x < size.x; x++)
        {
            for (int y = 0; y < size.y; y++)
            {
                remainingPositions.Add(new Vector2Int(x, y));
            }
        }
        for (int i = 0; i < colorAreaCount; i++)
        {
            ColorArea colorArea = new ColorArea();
            colorArea.origin = new Vector2Int(Random.Range(0, size.x), Random.Range(0, size.y));
            colorArea.edgePositions.Add(colorArea.origin);
            colorArea.color   = ColorExtensions.RandomColor();          //.SetAlpha(Random.value);
            output.colorAreas = output.colorAreas.Add(colorArea);
            remainingPositions.Remove(colorArea.origin);
            output.colors[colorArea.origin.x + colorArea.origin.y * size.x] = colorArea.color;
        }
        while (remainingPositions.Count > 0)
        {
            for (int i = 0; i < colorAreaCount; i++)
            {
                ColorArea colorArea         = output.colorAreas[i];
                int       edgePositionCount = colorArea.edgePositions.Count;
                if (edgePositionCount > 0)
                {
                    for (int i2 = 0; i2 < edgePositionCount; i2++)
                    {
                        Vector2Int edgePosition = colorArea.edgePositions[i2];
                        output.TryToSpreadColorAreaToPosition(ref colorArea, edgePosition + Vector2Int.right, ref remainingPositions);
                        output.TryToSpreadColorAreaToPosition(ref colorArea, edgePosition + Vector2Int.left, ref remainingPositions);
                        output.TryToSpreadColorAreaToPosition(ref colorArea, edgePosition + Vector2Int.up, ref remainingPositions);
                        output.TryToSpreadColorAreaToPosition(ref colorArea, edgePosition + Vector2Int.down, ref remainingPositions);
                        colorArea.edgePositions.Remove(edgePosition);
                        edgePositionCount--;
                    }
                    output.colorAreas[i] = colorArea;
                }
            }
        }
        return(output);
    }
Beispiel #2
0
 public virtual void GenerateRandom()
 {
     sampledColorGradient = SampledColorGradient2D.GenerateRandom(textureSize, colorAreaCount, blurRadius);
 }