예제 #1
0
        /// <summary>
        /// Создание игрового мира с историей и граф провинций.
        /// </summary>
        /// <returns>
        /// Возвращает объект игрового мира.
        /// </returns>
        public Task <GlobeGenerationResult> GenerateGlobeAsync()
        {
            return(Task.Run(() =>
            {
                var globe = new Globe
                {
                    Terrain = new TerrainCell[WORLD_SIZE][],
                    agentNameGenerator = new RandomName(_dice),
                    cityNameGenerator = new CityNameGenerator(_dice)
                };

                var realmTask = CreateRealmsAsync(globe, _realmNames);
                var terrainTask = CreateTerrainAsync(globe);

                Task.WaitAll(realmTask, terrainTask);

                CreateStartLocalities(globe);
                CreateStartAgents(globe);

                var cardQueue = CreateAgentCardQueue();

                // обработка итераций
                ProcessIterations(globe, cardQueue);

                globe.StartProvince = GetStartProvinceCoords(globe);
                globe.HomeProvince = GetHomeProvinceCoords(globe, globe.StartProvince);

                // Сейчас история пустая. Пока не разработаны требования, как лучше сделать.
                var globeHistory = new GlobeGenerationHistory();
                var result = new GlobeGenerationResult(globe, globeHistory);
                return result;
            }));
        }
 public GlobeGenerationResult(Globe globe, GlobeGenerationHistory history)
 {
     Globe   = globe ?? throw new ArgumentNullException(nameof(globe));
     History = history ?? throw new ArgumentNullException(nameof(history));
 }