private int[,] GetBiomeMap()
        {
            Tile tile = (Tile)target;
            int  res  = tile.MeshManager.HeightmapResolution;

            BiomeNode[]  biomes  = TerraConfig.Instance.Graph.GetEndNode().GetBiomes();
            BiomeSampler sampler = new BiomeSampler(biomes);

            return(sampler.GetBiomeMap(TerraConfig.Instance, tile.GridPosition, res));
        }
        private void SetBlurredBiomePreviewTexture()
        {
            Tile tile = (Tile)target;
            int  res  = tile.MeshManager.HeightmapResolution;

            BiomeNode[]  biomes  = TerraConfig.Instance.Graph.GetEndNode().GetBiomes();
            BiomeSampler sampler = new BiomeSampler(biomes);

            Texture2D tex;

            if (biomes.Length == 1)
            {
                tex = new Texture2D(res, res);
                MathUtil.LoopXY(res, (x, y) => {
                    // Set colors based on how much biome is showing
                    tex.SetPixel(x, y, biomes[0].PreviewColor);
                });
                tex.Apply();
                _previewTexture = tex;
                return;
            }

            int[,] map          = sampler.GetBiomeMap(TerraConfig.Instance, tile.GridPosition, res);
            float[,] blurredMap = BlurUtils.GaussianConvolution(map, _tile.PreviewDeviation);

            _tile.PreviewGradient = new Gradient();
            GradientColorKey[] colorKeys = new GradientColorKey[biomes.Length];
            float stepSize = 1f / (biomes.Length - 1);
            float offset   = 0f;

            for (int i = 0; i < biomes.Length; i++)
            {
                GradientColorKey colorKey = new GradientColorKey {
                    color = biomes[i].PreviewColor, time = offset
                };
                colorKeys[i] = colorKey;

                offset += stepSize;
            }

            _tile.PreviewGradient.colorKeys = colorKeys;

            //Set texture
            tex = new Texture2D(res, res);
            MathUtil.LoopXY(res, (x, y) => {
                // Set colors based on how much biome is showing
                float normalized = blurredMap[x, y] / biomes.Length;
                tex.SetPixel(x, y, _tile.PreviewGradient.Evaluate(normalized));
            });

            tex.Apply();
            _previewTexture = tex;
        }
Beispiel #3
0
        public override Texture2D DidRequestTextureUpdate(int size, float spread)
        {
            Texture2D tex = new Texture2D(size, size);

            BiomeNode[]  biomes  = GetBiomes();
            BiomeSampler sampler = new BiomeSampler(biomes);

            int[,] map = sampler.GetBiomeMap(GridPosition.Zero, 1, spread, size);

            //Set texture
            MathUtil.LoopXY(size, (x, y) => { tex.SetPixel(x, y, biomes[map[x, y]].PreviewColor); });

            tex.Apply();
            return(tex);
        }
        private void SetBiomePreviewTexture()
        {
            Tile tile = (Tile)target;
            int  res  = tile.MeshManager.HeightmapResolution;

            BiomeNode[]  biomes  = TerraConfig.Instance.Graph.GetEndNode().GetBiomes();
            BiomeSampler sampler = new BiomeSampler(biomes);

            int[,] map = sampler.GetBiomeMap(TerraConfig.Instance, tile.GridPosition, res);

            //Set texture
            Texture2D tex = new Texture2D(res, res);

            MathUtil.LoopXY(res, (x, y) => { tex.SetPixel(x, y, biomes[map[x, y]].PreviewColor); });

            tex.Apply();
            _previewTexture = tex;
        }