public PathGenerator(uint seed, GetHeight getHeight)
 {
     m_getHeight = getHeight;
     var fastRandom = new FastRandom(seed);
     m_cellNoise = new CellNoise2D(fastRandom.NextUInt());
     m_sources = new Dictionary<uint, PathGraphNode>();
     m_sinks = new Dictionary<uint, PathGraphNode>();
     m_general = new Dictionary<uint, PathGraphNode>();
     m_paths = new List<PathNodeList>();
 }
 public async void Initialize(uint seed)
 {
     Seed = seed;
     var random = new FastRandom(Seed);
     var settings = await MainEngine.GetEngineInstance().GeneralSettings;
     m_sealevel = settings.SeaLevel;
     m_mountainHeight = settings.MountainHeight - m_sealevel;
     var rescale = settings.BiomeSampleRescale;
     m_detailScale = settings.DetailScale;
     m_sinkHoleDepth = settings.SinkHoleDepth;
     m_biomeThickness = settings.BiomeThickness;
     m_elevation = new SimplexNoise2D(random.NextUInt());
     m_detail = new SimplexNoise2D(random.NextUInt());
     m_detail2 = new SimplexNoise2D(random.NextUInt());
     m_volume = new SimplexNoise3D(random.NextUInt());
     m_voroni = new CellNoise2D(random.NextUInt());
     m_populator = new StructureGenerator(random.NextUInt());
     m_riverGenerator = new PathGenerator(random.NextUInt(), GetHeight);
     m_riverGenerator.InitializePathSystem(0, 0, 256);
     m_biomeGenerator = new BiomeGeneratorCollection(random.NextUInt(), GetHeight, settings.Biomes, rescale, m_sealevel, m_mountainHeight);
     m_provinceGenerator = new ProvinceGeneratorCollection(random.NextUInt(), GetHeight, settings.Provinces, rescale, m_sealevel, m_mountainHeight);
     IsInitialized = true;
 }