Beispiel #1
0
        public static IEnumerator SetLayer(LandLayers layer, int topology = 0)
        {
            if (GroundTextures == null || BiomeTextures == null || MiscTextures == null)
            {
                GetTextures();
            }

            switch (layer)
            {
            case LandLayers.Ground:
                Land.terrainData.terrainLayers = GroundTextures;
                Land.terrainData.SetAlphamaps(0, 0, GroundArray);
                LandLayer = layer;
                break;

            case LandLayers.Biome:
                Land.terrainData.terrainLayers = BiomeTextures;
                Land.terrainData.SetAlphamaps(0, 0, BiomeArray);
                LandLayer = layer;
                break;

            case LandLayers.Topology:
                LastTopologyLayer = topology;
                Land.terrainData.terrainLayers = MiscTextures;
                Land.terrainData.SetAlphamaps(0, 0, TopologyArray[topology]);
                LandLayer = layer;
                break;
            }
            TopologyLayerEnum = (TerrainTopology.Enum)TerrainTopology.IndexToType(topology);
            LayerSet          = true;
            yield return(null);
        }
Beispiel #2
0
        /// <summary>Sets and initialises the Splat/AlphaMaps of all layers from MapInfo. Called when first loading/creating a map.</summary>
        private static IEnumerator SetSplatMaps(MapInfo mapInfo, int progressID)
        {
            SplatMapRes = mapInfo.splatRes;

            SetSplatMap(mapInfo.splatMap, LayerType.Ground);
            SetSplatMap(mapInfo.biomeMap, LayerType.Biome);
            SetAlphaMap(mapInfo.alphaMap);
            yield return(null);

            Progress.Report(progressID, .8f, "Loaded: Splats.");

            TopologyData.Set(mapInfo.topology);
            Parallel.For(0, TerrainTopology.COUNT, i =>
            {
                if (CurrentLayerType != LayerType.Topology || TopologyLayer != i)
                {
                    SetSplatMap(TopologyData.GetTopologyLayer(TerrainTopology.IndexToType(i)), LayerType.Topology, i);
                }
            });
            SetSplatMap(TopologyData.GetTopologyLayer(TerrainTopology.IndexToType(TopologyLayer)), LayerType.Topology, TopologyLayer);
            Progress.Report(progressID, .9f, "Loaded: Topologies.");
        }
Beispiel #3
0
    /// <summary>Converts all the Topology Layer arrays back into a single byte array.</summary>
    public static void SaveTopologyLayers()
    {
        TerrainMap <int> topologyMap = new TerrainMap <int>(top, 1);

        Parallel.For(0, TerrainTopology.COUNT, i =>
        {
            Parallel.For(0, topologyMap.res, j =>
            {
                for (int k = 0; k < topologyMap.res; k++)
                {
                    if (TopologyArray[i][j, k, 0] > 0)
                    {
                        topologyMap[j, k] = topologyMap[j, k] | TerrainTopology.IndexToType(i);
                    }
                    if (TopologyArray[i][j, k, 1] > 0)
                    {
                        topologyMap[j, k] = topologyMap[j, k] & ~TerrainTopology.IndexToType(i);
                    }
                }
            });
        });
        top = topologyMap.ToByteArray();
    }
Beispiel #4
0
    /// <summary>Inverts the selected Topology layers.</summary>
    /// <param name="topologyLayers">The Topology layers to invert.</param>
    public static void InvertTopologyLayers(TerrainTopology.Enum topologyLayers)
    {
        List <int> topologyElements = GetEnumSelection(topologyLayers);

        int progressId = Progress.Start("Invert Topologies");

        for (int i = 0; i < topologyElements.Count; i++)
        {
            Progress.Report(progressId, (float)i / topologyElements.Count, "Inverting: " + ((TerrainTopology.Enum)TerrainTopology.IndexToType(i)).ToString());
            InvertLayer(LandLayers.Topology, i);
        }
        Progress.Finish(progressId);
    }
Beispiel #5
0
    /// <summary>Rotates the selected topologies.</summary>
    /// <param name="topologyLayers">The Topology layers to rotate.</param>
    /// <param name="CW">True = 90°, False = 270°</param>
    public static void RotateTopologyLayers(TerrainTopology.Enum topologyLayers, bool CW)
    {
        List <int> topologyElements = GetEnumSelection(topologyLayers);

        int progressId = Progress.Start("Rotating Topologies", null, Progress.Options.Sticky);

        for (int i = 0; i < topologyElements.Count; i++)
        {
            Progress.Report(progressId, (float)i / topologyElements.Count, "Rotating: " + ((TerrainTopology.Enum)TerrainTopology.IndexToType(i)).ToString());
            RotateLayer(LandLayers.Topology, CW, i);
        }
        Progress.Finish(progressId);
    }