/// <summary>
        /// Runs the erosion program.
        /// </summary>
        /// <param name="inHeightMap">Height map.</param>
        /// <param name="rainfallMap">Rainfall map.</param>
        /// <param name="inRules">Rules for erosion.</param>
        /// <param name="isWater">Whether a point is above a certain threshold for being water.</param>
        /// <param name="erosionMap">How much erosion each point experiences.</param>
        public static void Run(double[,] inHeightMap, double[,] rainfallMap, ErosionMapRules inRules, out bool[,] isWater, out double[,] erosionMap)
        {
            rules = inRules;
            ConstructData();
            waterContained = rainfallMap;
            heightMap      = inHeightMap;
            rainWater      = rainfallMap;
            var sectionCount = SectionCount(out int sectionSpacing, out int firstSpacing);

            Parallel.For(0, (sectionCount), (i) =>
            {
                if (i == 0)
                {
                    WaterSectionFlow(0, firstSpacing);
                }
                else
                {
                    WaterSectionFlow(firstSpacing + (i - 1) * sectionSpacing, firstSpacing + i * sectionSpacing);
                }
            });
            WaterFullFlow(sectionSpacing, firstSpacing, sectionCount);
            CalculateWaterArea();
            isWater    = CheckWaterMap();
            erosionMap = CalculateErosionMap();
        }
Exemple #2
0
 /// <summary>
 /// Saves rules to given file location.
 /// </summary>
 /// <param name="fileName">File to save to, not including extension.</param>
 /// <param name="rules">Rules to save.</param>
 public static void Save(string fileName, ErosionMapRules rules)
 {
     using (StreamWriter file = new StreamWriter(fileName + ".xml", false))
     {
         var ruleType   = rules.GetType();
         var serializer = new XmlSerializer(typeof(ErosionMapRules));
         serializer.Serialize(file, rules);
     }
 }