public void GenerateGradient_GeneratesExpectedGradient() { List<int> ints = new List<int>() { 1, 2, 3, 4 }; List<Color> colors = new List<Color>() { Color.FromArgb(0, 255, 255), Color.FromArgb(85, 234, 237), Color.FromArgb(170, 213, 220), Color.FromArgb(255, 192, 203) }; GradientGenerator generator = new GradientGenerator(); List<StyleClass<int>> gradient = generator.GenerateGradient(ints, Color.Aqua, Color.Pink, ints.Count); bool gradientIsExpected = true; for (int i = 0; i < ints.Count; i++) { if (gradient[i].Color != colors[i]) { gradientIsExpected = false; break; } } Assert.True(gradientIsExpected); }
private JobHandle GenerateHeatMap(MapData myData) { //Gradiant Map NativeArray <float> HeatMapGradient = new NativeArray <float>(Width * Height, Allocator.TempJob); GradientGenerator myGradientGenerator = new GradientGenerator() { EquatorSize = (int)Math.Floor(EquatorSizeAsPercent * Height), Width = this.Width, Height = this.Height, HeatMapBase = HeatMapGradient }; var HeatMapGradientGeneration = myGradientGenerator.Schedule(Height, 32); //Simplex Map var HeatMapSimplex = new NativeArray <float>(Width * Height, Allocator.TempJob); var SimplexHeatMapGeneration = CreateNormalizedSimplexNoiseMap(this.Seed << 1, HeatMapPower, this.HeatOctaves, this.HeatFrequency, this.Persistence, this.Amplitude, this.Lacunarity, Width, Height, HeatMapSimplex); var AwaitGradientAndSimplexHeatMaps = JobHandle.CombineDependencies(HeatMapGradientGeneration, SimplexHeatMapGeneration); //Merge Heat Simplex Map and Gradient Map with blend Job BlendMultiplyAndDeallocateJob myBlendJob = new BlendMultiplyAndDeallocateJob() { NoiseSource1 = HeatMapGradient, NoiseSource2 = HeatMapSimplex, Width = Width, Output = myData.HeatMapAsNativeArray() }; return(myBlendJob.Schedule(Width * Height, 32, AwaitGradientAndSimplexHeatMaps)); }
public override void OnInspectorGUI() { DrawDefaultInspector(); GradientGenerator generator = (GradientGenerator)target; if (GUILayout.Button("Build Texture")) { preview = GenerateTexture(generator.gradient); } if (preview != null) { GUILayout.Label(preview); Rect r = EditorGUILayout.GetControlRect(); GUI.DrawTexture(r, preview); if (GUILayout.Button("Save Texture")) { SaveTexture(preview); } } }
private void SetNewGradient() { recolor.fillGradient.value = GradientGenerator.RandomGradient(); }
MapData GenerateMapData(Vector2 centre, int edge) { float[,] noiseMap = Noise.GenerateNoiseMap(mapChunkSize + 2, mapChunkSize + 2, seed, noiseScale, octaves, persistance, lacunarity, centre + offset, normalizeMode); topEdgeMap = GradientGenerator.GenerateTopGradient(mapChunkSize); bottomEdgeMap = GradientGenerator.GenerateBottomGradient(mapChunkSize); leftEdgeMap = GradientGenerator.GenerateLeftGradient(mapChunkSize); rightEdgeMap = GradientGenerator.GenerateRightGradient(mapChunkSize); Color[] colourMap = new Color[mapChunkSize * mapChunkSize]; for (int y = 0; y < mapChunkSize; y++) { for (int x = 0; x < mapChunkSize; x++) { if (falloffUsed) { if (justBottom) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - bottomEdgeMap[x, y]); } if (justRight) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - rightEdgeMap[x, y]); } if (justTop) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - topEdgeMap[x, y]); } if (justLeft) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - leftEdgeMap[x, y]); } } if (edge == 0) { noiseMap[x, y] = noiseMap[x, y]; } if (edge == 1) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - leftEdgeMap[x, y]); } else if (edge == 2) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - topEdgeMap[x, y]); } else if (edge == 3) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - rightEdgeMap[x, y]); } else if (edge == 4) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - bottomEdgeMap[x, y]); } else if (edge == 5) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - (bottomEdgeMap[x, y] + leftEdgeMap[x, y])); } else if (edge == 6) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - (bottomEdgeMap[x, y] + rightEdgeMap[x, y])); } else if (edge == 7) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - (topEdgeMap[x, y] + leftEdgeMap[x, y])); } else if (edge == 8) { noiseMap[x, y] = Mathf.Clamp01(noiseMap[x, y] - (topEdgeMap[x, y] + rightEdgeMap[x, y])); } float currentHeight = noiseMap[x, y]; for (int i = 0; i < regions.Length; i++) { if (currentHeight >= regions[i].height) { colourMap[y * mapChunkSize + x] = regions[i].colour; } else { break; } } } } return(new MapData(noiseMap, colourMap)); }