private static async System.Threading.Tasks.Task <GlobeRegion> CreateRegionAsync(Globe globe, TerrainCell startCell, IWorldGenerator globeGenerator, ProgressStorageService progressStorageService) { return(await globeGenerator.GenerateRegionAsync(globe, startCell)); }
private async void Start() { if (_globeManager.Globe == null) { _globeManager.Globe = await _globeGenerator.GenerateGlobeAsync(); var firstLocality = _globeManager.Globe.Localities.First(); _player.Terrain = firstLocality.Cell; var createdRegion = await _globeGenerator.GenerateRegionAsync(_globeManager.Globe, firstLocality.Cell); _globeManager.Regions[_player.Terrain] = createdRegion; var firstNode = (GlobeRegionNode)createdRegion.Nodes.First(); _player.GlobeNode = firstNode; } var currentGlobeCell = _player.Terrain; _region = _globeManager.Regions[currentGlobeCell]; _locationNodeViewModels = new List <MapLocation>(100); foreach (GlobeRegionNode globeRegionNode in _region.Nodes) { var worldCoords = HexHelper.ConvertToWorld(globeRegionNode.OffsetX, globeRegionNode.OffsetY); var locationObject = _container.InstantiatePrefab(LocationPrefab, transform); locationObject.transform.position = new Vector3(worldCoords[0], worldCoords[1], 0); var locationViewModel = locationObject.GetComponent <MapLocation>(); locationViewModel.Node = globeRegionNode; _locationNodeViewModels.Add(locationViewModel); locationViewModel.OnSelect += LocationViewModel_OnSelect; locationViewModel.OnHover += LocationViewModel_OnHover; } var openNodeViewModels = new List <MapLocation>(_locationNodeViewModels); while (openNodeViewModels.Any()) { var currentNodeViewModel = openNodeViewModels[0]; openNodeViewModels.Remove(currentNodeViewModel); var neighbors = _region.GetNext(currentNodeViewModel.Node); var neighborViewModels = openNodeViewModels.Where(x => neighbors.Contains(x.Node)).ToArray(); foreach (var neibourNodeViewModel in neighborViewModels) { var connectorObject = _container.InstantiatePrefab(ConnectorPrefab, transform); var connectorViewModel = connectorObject.GetComponent <MapLocationConnector>(); connectorViewModel.gameObject1 = currentNodeViewModel.gameObject; connectorViewModel.gameObject2 = neibourNodeViewModel.gameObject; } } var playerGroupNodeViewModel = _locationNodeViewModels.Single(x => x.Node == _player.GlobeNode); var groupObject = _container.InstantiatePrefab(HumanGroupPrefab, transform); _groupViewModel = groupObject.GetComponent <GroupVM>(); _groupViewModel.CurrentLocation = playerGroupNodeViewModel; groupObject.transform.position = playerGroupNodeViewModel.transform.position; Camera.Target = groupObject; _player.GlobeNodeChanged += HumanPlayer_GlobeNodeChanged; MoveGroupViewModel(_player.GlobeNode); }