| 294 | } |
| 295 | |
| 296 | std::vector<cPosition*> cRandomMap::calculatePath(size_t pSpriteType, cPosition* Pos1, cPosition* Pos2) { |
| 297 | std::vector<cPosition> path; |
| 298 | |
| 299 | mPathSearchUnitType = pSpriteType; |
| 300 | |
| 301 | switch (pSpriteType) { |
| 302 | default: |
| 303 | mPathTilesNotTouchable = mTiles_NotWalkable; |
| 304 | break; |
| 305 | |
| 306 | case eSprite_Tank_Enemy: |
| 307 | case eSprite_Tank_Human: |
| 308 | mPathTilesNotTouchable = mTiles_NotDriveable; |
| 309 | break; |
| 310 | |
| 311 | case eSprite_Civilian: |
| 312 | case eSprite_Civilian2: |
| 313 | case eSprite_Hostage: |
| 314 | case eSprite_Enemy_Leader: |
| 315 | mPathTilesNotTouchable = mTiles_NotFlyable; |
| 316 | break; |
| 317 | |
| 318 | } |
| 319 | |
| 320 | auto pather = new micropather::MicroPather(this, 1000); |
| 321 | float totalCost; |
| 322 | auto result = pather->Solve(Pos1, Pos2, &path, &totalCost); |
| 323 | |
| 324 | delete pather; |
| 325 | |
| 326 | std::vector<cPosition*> paths; |
| 327 | |
| 328 | for (auto p : path) { |
| 329 | paths.push_back(new cPosition(p)); |
| 330 | } |
| 331 | |
| 332 | return paths; |
| 333 | } |
| 334 | |
| 335 | int cRandomMap::Passable(int nx, int ny) |
| 336 | { |