private static bool ExpandConnection(PositionedConnection conn, char[,] artChars)
{
Position currentPos = conn.track[conn.track.Count - 1];
List <Position.Direction> dirs = new List <Position.Direction>();
foreach (var direction in PositionedConnection.GetContainedDirections(conn.tailDirection))
{
Position newPos = currentPos + direction;
if (newPos.IsWithin(artChars))
{
Position.Direction thisDir = CharFits(artChars[newPos.x, newPos.y], direction);
if (thisDir != Position.Direction.None)
{
dirs.Add(direction);
}
}
}
if (dirs.Count == 0)
{
throw new InvalidOperationException("Connection reaches dead end");
}
if (dirs.Count > 1)
{
throw new InvalidOperationException("Connection reaches splitting point: not allowed");
}
Position newPoint = currentPos + dirs[0];
conn.track.Add(newPoint);
conn.tailDirection = CharFits(artChars[newPoint.x, newPoint.y], dirs[0]);
return(!TailAtEnd(artChars[newPoint.x, newPoint.y]));
}