void Pathfinding::SetDestination(int x, int y) { if (!mapimg.empty()) { if (OnMap(x, y)) { dest = Point2A(x, y); calculated = false; } } }
void Pathfinding::SetStart(int x, int y) { if (!mapimg.empty()) { if (OnMap(x, y)) { start = Point2A(x, y); calculated = false; } } }
int GmGridMapView::GetNodeDxDy(int node, int dx, int dy) { int result; int x = node % _gmGridWidth + dx; int y = node / _gmGridWidth + dy; if (OnMap(x, y)) { result = x + y * _gmGridWidth; } else { result = node; } return result; }
Pathfinding::Point2A* Pathfinding::GetNeighbors (Point2A p, int& arraySize) { arraySize = 0; uchar size; if (diagonal) size = 8; else size = 4; Point2A* ret = new Point2A[size]; for (int i = 0; i < size; i++) { int x, y; if (diagonal) { x = p.x + diagonalDirX[i]; y = p.y + diagonalDirY[i]; } else { x = p.x + nonDiagonalDirX[i]; y = p.y + nonDiagonalDirY[i]; } if (!OnMap(x, y)) continue; float level = p.level + 1.f + (255 - blurmap.at<Vec3b>(y, x)[2]) / 255.f * wall_weight; Point2A n = Point2A(x, y, level, i); if (diagonal && (i == 0 || i == 2 || i == 5 || i == 7)) n.level += 0.414213f; ret[arraySize] = n; arraySize++; } return ret; }