public List <NavEdge> GetNeighbors(Vector2Int node) { List <NavEdge> neighbors = new List <NavEdge>(); Vector2Int ul = new Vector2Int(node.x - 1, node.y + 1); Vector2Int u = new Vector2Int(node.x, node.y + 1); Vector2Int ur = new Vector2Int(node.x + 1, node.y + 1); Vector2Int l = new Vector2Int(node.x - 1, node.y); Vector2Int r = new Vector2Int(node.x + 1, node.y); Vector2Int dl = new Vector2Int(node.x - 1, node.y - 1); Vector2Int d = new Vector2Int(node.x, node.y - 1); Vector2Int dr = new Vector2Int(node.x + 1, node.y - 1); //Test Up-left if (mapModel.Traversable(ul) && !mapModel.ContainsStructure(ul) && !mapModel.HardCorners(l) && !mapModel.HardCorners(u)) { if (mapModel.ContainsUnit(ul)) { neighbors.Add(new NavEdge(node, ul, OBST_COST)); } else { neighbors.Add(new NavEdge(node, ul, DIAG_COST)); } } //Test Up if (mapModel.Traversable(u) && !mapModel.ContainsStructure(u)) { if (mapModel.ContainsUnit(u)) { neighbors.Add(new NavEdge(node, u, OBST_COST)); } else { neighbors.Add(new NavEdge(node, u, ORTH_COST)); } } //Test Up-right if (mapModel.Traversable(ur) && !mapModel.ContainsStructure(ur) && !mapModel.HardCorners(r) && !mapModel.HardCorners(u)) { if (mapModel.ContainsUnit(ur)) { neighbors.Add(new NavEdge(node, ur, OBST_COST)); } else { neighbors.Add(new NavEdge(node, ur, ORTH_COST)); } } //Test Left if (mapModel.Traversable(l) && !mapModel.ContainsStructure(l)) { if (mapModel.ContainsUnit(l)) { neighbors.Add(new NavEdge(node, l, OBST_COST)); } else { neighbors.Add(new NavEdge(node, l, ORTH_COST)); } } //Test Right if (mapModel.Traversable(r) && !mapModel.ContainsStructure(r)) { if (mapModel.ContainsUnit(r)) { neighbors.Add(new NavEdge(node, r, OBST_COST)); } else { neighbors.Add(new NavEdge(node, r, ORTH_COST)); } } //Test Down-left if (mapModel.Traversable(dl) && !mapModel.ContainsStructure(dl) && !mapModel.HardCorners(l) && !mapModel.HardCorners(d)) { if (mapModel.ContainsUnit(dl)) { neighbors.Add(new NavEdge(node, dl, OBST_COST)); } else { neighbors.Add(new NavEdge(node, dl, DIAG_COST)); } } //Test Down if (mapModel.Traversable(d) && !mapModel.ContainsStructure(d)) { if (mapModel.ContainsUnit(d)) { neighbors.Add(new NavEdge(node, d, OBST_COST)); } else { neighbors.Add(new NavEdge(node, d, ORTH_COST)); } } //Test Down-right if (mapModel.Traversable(dr) && !mapModel.ContainsStructure(dr) && !mapModel.HardCorners(r) && !mapModel.HardCorners(d)) { if (mapModel.ContainsUnit(dr)) { neighbors.Add(new NavEdge(node, dr, OBST_COST)); } else { neighbors.Add(new NavEdge(node, dr, DIAG_COST)); } } return(neighbors); }