/** * Get all edges connected to a vertex. * - This will be used to calculate validity of placement of roads. */ public List <Vertex> GetConnectedVerticesFromEdge(int col, int row, EdgeSpecifier edgeSpec) { List <Vertex> vertices = new List <Vertex>(); switch (edgeSpec) { case EdgeSpecifier.W: if (gridVertices[col, row, (int)VertexSpecifier.L] != null) { vertices.Add(gridVertices[col, row, (int)VertexSpecifier.L]); } if (gridVertices[col - 1, row + 1, (int)VertexSpecifier.R] != null) { vertices.Add(gridVertices[col - 1, row + 1, (int)VertexSpecifier.R]); } break; case EdgeSpecifier.N: if (gridVertices[col - 1, row + 1, (int)VertexSpecifier.R] != null) { vertices.Add(gridVertices[col - 1, row + 1, (int)VertexSpecifier.R]); } if (gridVertices[col + 1, row, (int)VertexSpecifier.L] != null) { vertices.Add(gridVertices[col + 1, row, (int)VertexSpecifier.L]); } break; case EdgeSpecifier.E: if (gridVertices[col + 1, row, (int)VertexSpecifier.L] != null) { vertices.Add(gridVertices[col + 1, row, (int)VertexSpecifier.L]); } if (gridVertices[col, row, (int)VertexSpecifier.R] != null) { vertices.Add(gridVertices[col, row, (int)VertexSpecifier.R]); } break; } return(vertices); }
/** * Get all edges connected to an edge. * - This will be used to calculate validity of placement of roads. */ public List <Edge> GetConnectedEdgesFromEdge(int col, int row, EdgeSpecifier edgeSpec) { List <Edge> edges = new List <Edge>(); switch (edgeSpec) { case EdgeSpecifier.W: if (gridEdges[col - 1, row, (int)EdgeSpecifier.N] != null) { edges.Add(gridEdges[col - 1, row, (int)EdgeSpecifier.N]); } // Upper Left if (gridEdges[col - 1, row, (int)EdgeSpecifier.E] != null) { edges.Add(gridEdges[col - 1, row, (int)EdgeSpecifier.E]); } // Lower Left if (gridEdges[col - 1, row + 1, (int)EdgeSpecifier.E] != null) { edges.Add(gridEdges[col - 1, row + 1, (int)EdgeSpecifier.E]); } // Upper Right if (gridEdges[col, row, (int)EdgeSpecifier.N] != null) { edges.Add(gridEdges[col, row, (int)EdgeSpecifier.N]); } // Lower Right break; case EdgeSpecifier.N: if (gridEdges[col - 1, row + 1, (int)EdgeSpecifier.E] != null) { edges.Add(gridEdges[col - 1, row + 1, (int)EdgeSpecifier.E]); } // Upper Left if (gridEdges[col, row, (int)EdgeSpecifier.W] != null) { edges.Add(gridEdges[col, row, (int)EdgeSpecifier.W]); } // Lower Left if (gridEdges[col + 1, row, (int)EdgeSpecifier.W] != null) { edges.Add(gridEdges[col + 1, row, (int)EdgeSpecifier.W]); } // Upper Right if (gridEdges[col, row, (int)EdgeSpecifier.E] != null) { edges.Add(gridEdges[col, row, (int)EdgeSpecifier.E]); } // Lower Right break; case EdgeSpecifier.E: if (gridEdges[col + 1, row, (int)EdgeSpecifier.W] != null) { edges.Add(gridEdges[col + 1, row, (int)EdgeSpecifier.W]); } // Upper Left if (gridEdges[col, row, (int)EdgeSpecifier.N] != null) { edges.Add(gridEdges[col, row, (int)EdgeSpecifier.N]); } // Lower Left if (gridEdges[col + 1, row - 1, (int)EdgeSpecifier.N] != null) { edges.Add(gridEdges[col + 1, row - 1, (int)EdgeSpecifier.N]); } // Upper Right if (gridEdges[col + 1, row - 1, (int)EdgeSpecifier.W] != null) { edges.Add(gridEdges[col + 1, row - 1, (int)EdgeSpecifier.W]); } // Lower Right break; } return(edges); }
/** * Create an edge */ public void CreateEdge(int col, int row, EdgeSpecifier edgeSpecifier) { gridEdges[col, row, (int)edgeSpecifier] = new Edge(); }
/** * Return a vertex that is between two edges, if the edges are adjacent. */ public Vertex GetVertexBetweenTwoConnectedEdges(int col, int row, EdgeSpecifier edgeSpecifier, int col2, int row2, EdgeSpecifier edgeSpecifier2) { Edge edge2 = gridEdges[col2, row2, (int)edgeSpecifier2]; switch (edgeSpecifier) { case EdgeSpecifier.W: if (gridEdges[col - 1, row, (int)EdgeSpecifier.N] == edge2) { return(gridVertices[col, row, (int)VertexSpecifier.L]); } // Upper Left if (gridEdges[col - 1, row, (int)EdgeSpecifier.E] == edge2) { return(gridVertices[col, row, (int)VertexSpecifier.L]); } // Lower Left if (gridEdges[col - 1, row + 1, (int)EdgeSpecifier.E] == edge2) { return(gridVertices[col - 1, row + 1, (int)VertexSpecifier.R]); } // Upper Right if (gridEdges[col, row, (int)EdgeSpecifier.N] == edge2) { return(gridVertices[col - 1, row + 1, (int)VertexSpecifier.R]); } // Lower Right break; case EdgeSpecifier.N: if (gridEdges[col - 1, row + 1, (int)EdgeSpecifier.E] == edge2) { return(gridVertices[col - 1, row + 1, (int)VertexSpecifier.R]); } // Upper Left if (gridEdges[col, row, (int)EdgeSpecifier.W] == edge2) { return(gridVertices[col - 1, row + 1, (int)VertexSpecifier.R]); } // Lower Left if (gridEdges[col + 1, row, (int)EdgeSpecifier.W] == edge2) { return(gridVertices[col + 1, row, (int)VertexSpecifier.L]); } // Upper Right if (gridEdges[col, row, (int)EdgeSpecifier.E] == edge2) { return(gridVertices[col + 1, row, (int)VertexSpecifier.L]); } // Lower Right break; case EdgeSpecifier.E: if (gridEdges[col + 1, row, (int)EdgeSpecifier.W] == edge2) { return(gridVertices[col + 1, row, (int)VertexSpecifier.L]); } // Upper Left if (gridEdges[col, row, (int)EdgeSpecifier.N] == edge2) { return(gridVertices[col + 1, row, (int)VertexSpecifier.L]); } // Lower Left if (gridEdges[col + 1, row - 1, (int)EdgeSpecifier.N] == edge2) { return(gridVertices[col, row, (int)VertexSpecifier.R]); } // Upper Right if (gridEdges[col + 1, row - 1, (int)EdgeSpecifier.W] == edge2) { return(gridVertices[col, row, (int)VertexSpecifier.R]); } // Lower Right break; } return(null); }
/** * Obtain an edge from this grid. */ public Edge GetEdge(int col, int row, EdgeSpecifier edgeSpec) { return(gridEdges[col, row, (int)edgeSpec]); }