| 12302 | } |
| 12303 | |
| 12304 | void Entity::monsterMoveBackwardsAndPath(bool trySidesFirst) |
| 12305 | { |
| 12306 | while ( yaw < 0 ) |
| 12307 | { |
| 12308 | yaw += 2 * PI; |
| 12309 | } |
| 12310 | while ( yaw >= 2 * PI ) |
| 12311 | { |
| 12312 | yaw -= 2 * PI; |
| 12313 | } |
| 12314 | int x1 = ((int)floor(x)) >> 4; |
| 12315 | int y1 = ((int)floor(y)) >> 4; |
| 12316 | int u, v; |
| 12317 | std::vector<std::pair<int, int>> areaToTry; |
| 12318 | if ( yaw <= PI / 4 || yaw > 7 * PI / 4 ) |
| 12319 | { |
| 12320 | areaToTry.push_back(std::pair<int, int>(x1 - 1, y1)); |
| 12321 | areaToTry.push_back(std::pair<int, int>(x1 - 1, y1 + 1)); |
| 12322 | areaToTry.push_back(std::pair<int, int>(x1 - 1, y1 - 1)); |
| 12323 | areaToTry.push_back(std::pair<int, int>(x1 - 2, y1)); |
| 12324 | areaToTry.push_back(std::pair<int, int>(x1 - 2, y1 + 1)); |
| 12325 | areaToTry.push_back(std::pair<int, int>(x1 - 2, y1 - 1)); |
| 12326 | areaToTry.push_back(std::pair<int, int>(x1 - 3, y1)); |
| 12327 | } |
| 12328 | else if ( yaw > PI / 4 && yaw <= 3 * PI / 4 ) |
| 12329 | { |
| 12330 | areaToTry.push_back(std::pair<int, int>(x1, y1 - 1)); |
| 12331 | areaToTry.push_back(std::pair<int, int>(x1 + 1, y1 - 1)); |
| 12332 | areaToTry.push_back(std::pair<int, int>(x1 - 1, y1 - 1)); |
| 12333 | areaToTry.push_back(std::pair<int, int>(x1, y1 - 2)); |
| 12334 | areaToTry.push_back(std::pair<int, int>(x1 - 1, y1 - 2)); |
| 12335 | areaToTry.push_back(std::pair<int, int>(x1 + 1, y1 - 2)); |
| 12336 | areaToTry.push_back(std::pair<int, int>(x1, y1 - 3)); |
| 12337 | } |
| 12338 | else if ( yaw > 3 * PI / 4 && yaw <= 5 * PI / 4 ) |
| 12339 | { |
| 12340 | areaToTry.push_back(std::pair<int, int>(x1 + 1, y1)); |
| 12341 | areaToTry.push_back(std::pair<int, int>(x1 + 1, y1 + 1)); |
| 12342 | areaToTry.push_back(std::pair<int, int>(x1 + 2, y1 - 1)); |
| 12343 | areaToTry.push_back(std::pair<int, int>(x1 + 2, y1 + 1)); |
| 12344 | areaToTry.push_back(std::pair<int, int>(x1 + 2, y1 - 1)); |
| 12345 | areaToTry.push_back(std::pair<int, int>(x1 + 3, y1)); |
| 12346 | } |
| 12347 | else if ( yaw > 5 * PI / 4 && yaw <= 7 * PI / 4 ) |
| 12348 | { |
| 12349 | areaToTry.push_back(std::pair<int, int>(x1, y1 + 1)); |
| 12350 | areaToTry.push_back(std::pair<int, int>(x1 + 1, y1 + 1)); |
| 12351 | areaToTry.push_back(std::pair<int, int>(x1 - 1, y1 + 1)); |
| 12352 | areaToTry.push_back(std::pair<int, int>(x1, y1 + 2)); |
| 12353 | areaToTry.push_back(std::pair<int, int>(x1 - 1, y1 + 2)); |
| 12354 | areaToTry.push_back(std::pair<int, int>(x1 + 1, y1 + 2)); |
| 12355 | areaToTry.push_back(std::pair<int, int>(x1, y1 + 3)); |
| 12356 | } |
| 12357 | bool foundplace = false; |
| 12358 | |
| 12359 | if ( trySidesFirst ) |
| 12360 | { |
| 12361 | std::vector<std::pair<int, int>> sidesToTry; |
no test coverage detected