Пофиксить условие

Имеется класс врага, который стремиться догнать игрока. Есть некоторая карта, проблема заключается в том, что во время передвижения за игроком враги игнорируют стены. В какой части условия может быть ошибка? Как можно переделать?

Код метода отвечающего за преследование игрока. Он основан на вычитании векторов.

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;
}

Ответы (0 шт):