public void Build(MapSupervisor mapSupervisor) { if (!_isBuilt) { CreateOrAssignNeighbors(mapSupervisor); CreateOrAssignVerticesAndEdgesFromNeighbour(); ConnectVerticesAndEdges(); _isBuilt = true; foreach (var neighbor in Neighbours) { neighbor?.Build(mapSupervisor); } } }
private void CreateOrAssignNeighbors(MapSupervisor mapSupervisor) { foreach (Direction direction in Enum.GetValues(typeof(Direction))) { var directionAsInt = (int)direction; var neighborHexagonCoordinates = direction.GetNeighbourCoordinates(Coordinates); if (neighborHexagonCoordinates.IsWithinBoundaries(mapSupervisor.MapSettings)) { var alreadyExists = mapSupervisor.Map.TryGetValue(neighborHexagonCoordinates, out var neighborHexagon); if (!alreadyExists) { neighborHexagon = new Hexagon { Coordinates = neighborHexagonCoordinates }; mapSupervisor.Map.Add(neighborHexagonCoordinates, neighborHexagon); } Neighbours[directionAsInt] = neighborHexagon; } } }