public override void Process(uint seed)
    {
        List <PathList>  roads     = TerrainMeta.Path.Roads;
        TerrainHeightMap heightMap = TerrainMeta.HeightMap;

        foreach (PathList item in roads)
        {
            if (!World.Networked)
            {
                PathInterpolator path   = item.Path;
                Vector3[]        points = path.Points;
                for (int i = 0; i < points.Length; i++)
                {
                    Vector3 vector = points[i];
                    vector.y  = heightMap.GetHeight(vector);
                    points[i] = vector;
                }
                item.TrimTopology(2048);
                path.Smoothen(8, Vector3.up);
                path.RecalculateTangents();
                item.ResetTrims();
            }
            heightMap.Push();
            item.AdjustTerrainHeight();
            heightMap.Pop();
        }
        foreach (PathList item2 in roads.AsEnumerable().Reverse())
        {
            item2.AdjustTerrainTexture();
            item2.AdjustTerrainTopology();
        }
        MarkRoadside();
        TerrainMeta.PlacementMap.Reset();
    }
示例#2
0
    public override void Process(uint seed)
    {
        List <PathList>    roads     = TerrainMeta.Path.Roads;
        TerrainHeightMap   heightmap = TerrainMeta.HeightMap;
        TerrainTopologyMap topomap   = TerrainMeta.TopologyMap;

        foreach (PathList pathList in roads)
        {
            pathList.Path.RecalculateTangents();
        }
        heightmap.Push();
        foreach (PathList pathList in roads)
        {
            pathList.AdjustTerrainHeight();
            pathList.AdjustTerrainTexture();
            pathList.AdjustTerrainTopology();
        }
        heightmap.Pop();
        int[] map = topomap.dst;
        int   res = topomap.res;

        ImageProcessing.Dilate2D(map, res, res, 6144, 6, (Action <int, int>)((x, y) =>
        {
            if ((map[x * res + y] & 49) != 0)
            {
                map[x * res + y] |= 4096;
            }
            if ((double)heightmap.GetSlope(topomap.Coordinate(x), topomap.Coordinate(y)) <= 40.0)
            {
                return;
            }
            map[x * res + y] |= 2;
        }));
    }
    public override void Process(uint seed)
    {
        List <PathList>  rivers    = TerrainMeta.Path.Rivers;
        TerrainHeightMap heightMap = TerrainMeta.HeightMap;

        foreach (PathList item in rivers)
        {
            if (!World.Networked)
            {
                PathInterpolator path = item.Path;
                item.TrimTopology(16384);
                path.Smoothen(8, Vector3.up);
                path.RecalculateTangents();
                item.ResetTrims();
            }
            heightMap.Push();
            item.AdjustTerrainHeight();
            heightMap.Pop();
        }
        foreach (PathList item2 in rivers.AsEnumerable().Reverse())
        {
            item2.AdjustTerrainTexture();
            item2.AdjustTerrainTopology();
        }
        MarkRiverside();
    }
    public override void Process(uint seed)
    {
        List <PathList>    rivers      = TerrainMeta.Path.Rivers;
        TerrainHeightMap   heightMap   = TerrainMeta.HeightMap;
        TerrainTopologyMap topologyMap = TerrainMeta.TopologyMap;

        foreach (PathList river in rivers)
        {
            river.Path.RecalculateTangents();
        }
        heightMap.Push();
        foreach (PathList pathList in rivers)
        {
            pathList.AdjustTerrainHeight();
            pathList.AdjustTerrainTexture();
            pathList.AdjustTerrainTopology();
        }
        heightMap.Pop();
        int[] numArray = topologyMap.dst;
        int   num      = topologyMap.res;

        ImageProcessing.Dilate2D(numArray, num, num, 49152, 6, (int x, int y) => {
            if ((numArray[x * num + y] & 49) != 0)
            {
                numArray[x * num + y] |= 32768;
            }
            float single  = topologyMap.Coordinate(x);
            float single1 = topologyMap.Coordinate(y);
            if (heightMap.GetSlope(single, single1) > 40f)
            {
                numArray[x * num + y] |= 2;
            }
        });
    }