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); }
public virtual void GenerateRandom() { sampledColorGradient = SampledColorGradient2D.GenerateRandom(textureSize, colorAreaCount, blurRadius); }