Exemple #1
0
    /**
     * 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);
    }
Exemple #2
0
    /**
     * 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);
    }
Exemple #3
0
 /**
  * Create an edge
  */
 public void CreateEdge(int col, int row, EdgeSpecifier edgeSpecifier)
 {
     gridEdges[col, row, (int)edgeSpecifier] = new Edge();
 }
Exemple #4
0
    /**
     * 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);
    }
Exemple #5
0
 /**
  * Obtain an edge from this grid.
  */
 public Edge GetEdge(int col, int row, EdgeSpecifier edgeSpec)
 {
     return(gridEdges[col, row, (int)edgeSpec]);
 }