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));
    }
Exemplo n.º 3
0
    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);
            }
        }
    }
Exemplo n.º 4
0
 private void SetNewGradient()
 {
     recolor.fillGradient.value = GradientGenerator.RandomGradient();
 }
Exemplo n.º 5
0
    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));
    }