Пофиксить условие
Имеется класс врага, который стремиться догнать игрока. Есть некоторая карта, проблема заключается в том, что во время передвижения за игроком враги игнорируют стены. В какой части условия может быть ошибка? Как можно переделать?
Код метода отвечающего за преследование игрока. Он основан на вычитании векторов.
void EnemeyManager::followPlayer() {
for (auto &enemy : enemiesList) {
int newX = player->getX() - enemy.getX();
int newY = player->getY() - enemy.getY();
int signX = math.sign(newX);
int signY = math.sign(newY);
if (!collisionManager.chekCollisionWall(enemy.getX() + 1, enemy.getY() + 1)) {
enemy.setY(enemy.getY() + signY);
enemy.setX(enemy.getX() + signX);
} else if (collisionManager.chekWallCollisionX(enemy.getX() + 1)) {
enemy.setY(enemy.getY() + signY);
} else if (collisionManager.chekWallCollisionY(enemy.getY() + 1)) {
enemy.setX(enemy.getX() + signX);
}
}
}
И соответственно chekCollisionWall:
bool CollisionManager::chekCollisionWall(int entitieX, int entitieY) {
bool isWall;
std::vector<Wall> localWalls = wallsManager->getWalls();
for (auto item : localWalls) {
if (checkCollsion(item.getCurrentX(), item.getCurrentY(), entitieX, entitieY)) {
isWall = true;
}
}
return isWall;
}
и chekWallCollisionX и chekWallCollisionY
bool CollisionManager::chekWallCollisionX(int x) {
std::vector<Wall> localWalls = wallsManager->getWalls();
for (auto item : localWalls) {
if (item.getCurrentX() == x) {
return true;
}
}
return false;
}
bool CollisionManager::chekWallCollisionY(int y) {
std::vector<Wall> localWalls = wallsManager->getWalls();
for (auto item : localWalls) {
if (item.getCurrentY() == y) {
return true;
}
}
return false;
}