Example #1
0
    //TODO Попробовать сделать загрузку всех провинций параллельно.
    // Выглядит так, что каждый запуск метода не зависит от предыдущих запусков.
    /// <summary>
    /// Создание соседних провинций.
    /// </summary>
    /// <param name="playerCoords"> Текущии координаты игрока. </param>
    /// <param name="worldManager"> Менеджер мира. </param>
    /// <param name="worldGenerator"> Генератор мира, используемый для создания новых провинций. </param>
    /// <returns> Возвращает объект Task. </returns>
    private static async System.Threading.Tasks.Task CreateNeighborRegionsAsync(OffsetCoords playerCoords,
                                                                                IWorldManager worldManager,
                                                                                IWorldGenerator worldGenerator,
                                                                                ProgressStorageService progressStorageService)
    {
        for (var offsetX = -1; offsetX <= 1; offsetX++)
        {
            for (var offsetY = -1; offsetY <= 1; offsetY++)
            {
                if (offsetX == 0 && offsetY == 0)
                {
                    // Это нулевое смещение от текущего элемента.
                    // Пропускаем, т.к. текущий элемент уже есть.
                    continue;
                }

                var terrainX = playerCoords.X + offsetX;
                var terrainY = playerCoords.Y + offsetY;

                if (worldManager.Globe.Terrain.GetLowerBound(0) <= terrainX &&
                    terrainX <= worldManager.Globe.Terrain.GetUpperBound(0) &&
                    worldManager.Globe.Terrain[0].GetLowerBound(0) <= terrainY &&
                    terrainY <= worldManager.Globe.Terrain[0].GetUpperBound(0))
                {
                    var terrainCell = worldManager.Globe.Terrain[terrainX][terrainY];
                    if (!worldManager.Regions.ContainsKey(terrainCell))
                    {
                        var createdNeiborRegion = await CreateRegionAsync(worldManager.Globe, terrainCell, worldGenerator, progressStorageService);

                        worldManager.Regions[terrainCell] = createdNeiborRegion;
                    }
                }
            }
        }
    }
Example #2
0
 private static async System.Threading.Tasks.Task <GlobeRegion> CreateRegionAsync(Globe globe,
                                                                                  TerrainCell startCell,
                                                                                  IWorldGenerator globeGenerator,
                                                                                  ProgressStorageService progressStorageService)
 {
     return(await globeGenerator.GenerateRegionAsync(globe, startCell));
 }