public void Generate() { // Setup parameters based on user settings if (!CustomSeed) { Seed = Random.Range(0, 100000000); } if (!CustomNoiseGenerator) { System.Array values = System.Enum.GetValues(typeof(SS_NoiseGenerator)); NoiseGenerator = (SS_NoiseGenerator)values.GetValue(Random.Range(0, values.Length)); } if (!CustomFrequency) { Frequency = Random.Range(FrequencyMin, FrequencyMax); } if (!CustomLacunarity) { Lacunarity = Random.Range(LacunarityMin, LacunarityMax); } if (!CustomPersistence) { Persistence = Random.Range(PersistenceMin, PersistenceMax); } if (!CustomOctaves) { Octaves = Random.Range(OctavesMin, OctavesMax); } if (!CustomTint) { //Tint = new Color((float)Random.Range(0f, 1f), (float)Random.Range(0f, 1f), (float)Random.Range(0f, 1f)); double r, g, b = 0; SS_Utilities.HSVToRGB(Random.Range(0f / 360f, 360f / 360f), Random.Range(0f, 1f), Random.Range(0f, 1f), out r, out g, out b); Tint = new Color((float)r, (float)g, (float)b); } if (!CustomBrightness) { Brightness = Random.Range(BrightnessMin, BrightnessMax); } if (SS_StellarSprite.Threaded) { // Create the Stellar Sprite Object in it's own thread Thread generatorThread = new Thread(new ThreadStart(GenerateSprite)); generatorThread.Start(); } else { GenerateSprite(); } }
public SS_Background(int seed, int size, SS_NoiseGenerator backgroundNoise, double frequency, double lacunarity, double persistence, int octaves, Color tint, float brightness) { // Create sprite texture Sprite = new SS_Texture(size, size, Color.white); // Initialize noise with parameters ModuleBase myModule; if (backgroundNoise == SS_NoiseGenerator.Perlin) { Perlin perlin = new Perlin(frequency, lacunarity, persistence, octaves, seed, QualityMode.Low); myModule = perlin; } else { RidgedMultifractal ridgedMultifractal = new RidgedMultifractal(frequency, lacunarity, octaves, seed, QualityMode.Low); myModule = ridgedMultifractal; } // Create seemless tiling noise Noise2D noise = new Noise2D(size, size, myModule); noise.GeneratePlanar(0, size, 0, size, false); // Get noise data float[,] noiseData = noise.GetNormalizedData(false, 0, 0); // Create cloud for (int y = 0; y < size; y++) { for (int x = 0; x < size; x++) { float n = noiseData[y, x];; Color pixelColor = tint * n * brightness; pixelColor.a = ((pixelColor.r + pixelColor.g + pixelColor.b) / 3.0f); Sprite.SetPixel(x, y, pixelColor); } } }