public bool IsLegalToBuildLink(EdgePosition pos)
{
Edge edge = Board[pos];
if (edge == null || edge.Color != null)
{
return false;
}
if (CurrentPhase == GamePhase.Play)
{
return edge.Adjacent.Edges.Any(e => e.Color == CurrentUniversityColor);
}
// links to own campus
IVertex vertex =
edge.Adjacent.Vertices.SingleOrDefault(
v => v.Campus != null && v.Campus.Color == CurrentUniversityColor);
if (vertex == null)
{
return false;
}
// but not the same campus one as the other link
return !edge.Adjacent.Edges.Any(e => e.Color == CurrentUniversityColor &&
e.Adjacent.Vertices.Contains(vertex));
}