public void GetEdges(int x, int y, List<GridEdge> edges, float[,] weights = null) { int edge = Edges[x, y]; if (edge == 0) return; for (int i = 0; i < 8; i++) { int xi = x + D8.OFFSETS[i, 0]; int yi = y + D8.OFFSETS[i, 1]; if (xi < 0 || xi > Width - 1) continue; if (yi < 0 || yi > Height - 1) continue; if ((edge & 1 << i) == 0) continue; var e = new GridEdge(x, y, xi, yi); if (weights != null) e.Weight = weights[x, y] + weights[xi, yi]; edges.Add(e); edges.Add(new GridEdge(x, y, xi, yi)); } }
public List<GridEdge> GetAllEdges(float[,] weights = null) { List<GridEdge> edges = new List<GridEdge>(EdgeCount); for (int y = 0; y < Height; y++) { for (int x = 0; x < Width; x++) { int edge = Edges[x, y]; if (edge == 0) continue; for (int i = 0; i < 8; i++) { int xi = x + D8.OFFSETS[i, 0]; int yi = y + D8.OFFSETS[i, 1]; if (xi < 0 || xi > Width - 1) continue; if (yi < 0 || yi > Height - 1) continue; if ((edge & 1 << i) == 0) continue; var e = new GridEdge(x, y, xi, yi); if (weights != null) e.Weight = weights[x, y] + weights[xi, yi]; edges.Add(e); } } } return edges; }