bool MovePointTo(Vector2 direction, Border.BorderPoint point, Dictionary <Vector2, Border.BorderPoint> processedPoints, List <Border.BorderPoint> points) { bool commitPoint = false; Vector2 nextPosition = point.coordinates + direction; if (Mathf.Abs(nextPosition.x) > map.size.x / 2 || Mathf.Abs(nextPosition.y) > map.size.y / 2) { commitPoint = true; } else if (GetTemplateGreyscale(point.coordinates.x, point.coordinates.y) <= 0.05f) { commitPoint = true; } else if (!processedPoints.ContainsKey(nextPosition)) { processedPoints.Add(nextPosition, point); points.Add(new Border.BorderPoint(nextPosition, point.parentSystem)); } else if (processedPoints[nextPosition].parentSystem.Constellation != point.parentSystem.Constellation) { commitPoint = true; } return(commitPoint); }
void DrawConstellationsBorders() { List <Border.BorderPoint> points = new List <Border.BorderPoint>(); Dictionary <Vector2, Border.BorderPoint> processedPoints = new Dictionary <Vector2, Border.BorderPoint>(); foreach (Constellation constellation in constellations) { foreach (StarSystem system in constellation.Systems) { Border.BorderPoint point = new Border.BorderPoint(system.Position, system); points.Add(point); processedPoints.Add(point.coordinates, point); } } bool isDrawingBorder = true; while (isDrawingBorder) { isDrawingBorder = false; List <Border.BorderPoint> copyPoints = new List <Border.BorderPoint>(points); copyPoints.RemoveAll(x => x.isProcessed || x.isPositioned); foreach (Border.BorderPoint point in copyPoints) { isDrawingBorder = true; bool commitPoint = false; foreach (Vector2 direction in Utility.directions.Values) { commitPoint = commitPoint || MovePointTo(direction, point, processedPoints, points); } if (commitPoint) { point.isPositioned = true; } else { point.isProcessed = true; } } } foreach (Constellation constellation in constellations) { constellation.Border.RemoveProcessed(); constellation.Border.ConnectWithNeighbours(); constellation.Border.SmoothBorder(); constellation.oldBorder = new List <Vector2>(constellation.Border.Points.Keys); constellation.Border.SortBorderPointsList(); } }