// Only used in the prefabs when generating the local grid -- the prefab uses a grid layout, // so this works there just fine. public void AddAllNeighborsToGridNode(int row, int col, int width, int height) { for (int i = -1; i < 2; ++i) { for (int j = -1; j < 2; ++j) { int nodeX = (row + j); int nodeY = (col + i); if ((i == 0) && (j == 0)) { continue; } if (IsWithinBounds(nodeX, nodeY)) { int nodeIdx = col * width + row; var node = m_sparseGraph.GetNode(nodeIdx); if (node == null || node.NodeIndex == (int)ENodeType.InvalidNodeIndex) { continue; } var neighborNode = m_sparseGraph.GetNode(nodeY * width + nodeX); if (neighborNode == null || neighborNode.NodeIndex == (int)ENodeType.InvalidNodeIndex || neighborNode.nodeType == NodeType.Blocked) { continue; } var pos = new Vector3(node.position.x, node.position.y, node.position.z); var neighborPos = new Vector3(neighborNode.position.x, neighborNode.position.y, neighborNode.position.z); double distance = Vector3.Distance(pos, neighborPos); var newEdge = new GraphEdge(node.NodeIndex, neighborNode.NodeIndex, distance); m_sparseGraph.AddEdge(newEdge); if (!m_sparseGraph.IsDigraph()) { UnityEdge Edge = new UnityEdge(neighborNode.NodeIndex, node.NodeIndex, distance); m_sparseGraph.AddEdge(Edge); } } } } }
public void AddAllNeighborsToGridNode(int Row, int Col, int CellsX, int CellsY) { for (int i = -1; i < 2; ++i) { for (int j = -1; j < 2; ++j) { int NodeX = (Col + j); int NodeY = (Row + i); if ((i == 0) && (j == 0)) { continue; } if (ValidNeighbor(NodeX, NodeY, CellsX, CellsY)) { var Node = (UnityNode)Graph.GetNode(Row * CellsX + Col); if (Node.NodeIndex == -(int)ENodeType.InvalidNodeIndex) { continue; } var NeighborNode = (UnityNode)Graph.GetNode(NodeY * CellsX + NodeX); if (NeighborNode.NodeIndex == (int)ENodeType.InvalidNodeIndex) { continue; } var PosNode = new Vector3(Node.X, 1, Node.Y); var PosNeighborNode = new Vector3(NeighborNode.X, 1, NeighborNode.Y); double Distance = Vector3.Distance(PosNode, PosNeighborNode); var NewEdge = new UnityEdge(Node.NodeIndex, NeighborNode.NodeIndex, Distance); Graph.AddEdge(NewEdge); if (!Graph.IsDigraph()) { UnityEdge Edge = new UnityEdge(NeighborNode.NodeIndex, Node.NodeIndex, Distance); Graph.AddEdge(Edge); } } } } }