Revert "fix: enemy selection when several shielded enemies are visible. (#451)"

This reverts commit dd1adab3b6.
This commit is contained in:
jeefo 2023-06-04 22:11:26 +03:00
commit 50e6939cd0
No known key found for this signature in database
GPG key ID: 927BCA0779BEA8ED

View file

@ -262,11 +262,10 @@ bool Bot::lookupEnemies () {
// the old enemy is no longer visible or // the old enemy is no longer visible or
if (game.isNullEntity (newEnemy)) { if (game.isNullEntity (newEnemy)) {
// setup potential visibility set from engine auto set = game.getVisibilitySet (this, true); // setup potential visibility set from engine
auto set = game.getVisibilitySet (this, true);
// ignore shielded enemies, while we have others // ignore shielded enemies, while we have real one
Array <edict_t *> shieldedEnemies {}; edict_t *shieldEnemy = nullptr;
if (cv_attack_monsters.bool_ ()) { if (cv_attack_monsters.bool_ ()) {
// search the world for monsters... // search the world for monsters...
@ -296,10 +295,9 @@ bool Bot::lookupEnemies () {
// search the world for players... // search the world for players...
for (const auto &client : util.getClients ()) { for (const auto &client : util.getClients ()) {
if (client.team == m_team || client.ent == ent() || !(client.flags & (ClientFlags::Used | ClientFlags::Alive)) || !client.ent) { if (!(client.flags & ClientFlags::Used) || !(client.flags & ClientFlags::Alive) || client.team == m_team || client.ent == ent () || !client.ent) {
continue; continue;
} }
player = client.ent; player = client.ent;
// check the engine PVS // check the engine PVS
@ -307,17 +305,15 @@ bool Bot::lookupEnemies () {
continue; continue;
} }
// extra skill player can see through smoke... if beeing attacked // extra skill player can see thru smoke... if beeing attacked
if (m_difficulty == Difficulty::Expert && (player->v.button & (IN_ATTACK | IN_ATTACK2)) && m_viewDistance < m_maxViewDistance) { if ((player->v.button & (IN_ATTACK | IN_ATTACK2)) && m_viewDistance < m_maxViewDistance && m_difficulty == Difficulty::Expert) {
nearestDistance = cr::sqrf (m_maxViewDistance); nearestDistance = cr::sqrf (m_maxViewDistance);
} }
// see if bot can see the player... // see if bot can see the player...
if (seesEnemy (player)) { if (seesEnemy (player)) {
// low priority fo shielded enemies
if (isEnemyBehindShield (player)) { if (isEnemyBehindShield (player)) {
shieldedEnemies.push (player); shieldEnemy = player;
continue; continue;
} }
float distance = player->v.origin.distanceSq (pev->origin); float distance = player->v.origin.distanceSq (pev->origin);
@ -335,18 +331,8 @@ bool Bot::lookupEnemies () {
} }
m_enemyUpdateTime = game.time () + (usesKnife () ? 1.0f : 0.75f); m_enemyUpdateTime = game.time () + (usesKnife () ? 1.0f : 0.75f);
// If enemy is not selected yet then check visible shielded enemies if (game.isNullEntity (newEnemy) && !game.isNullEntity (shieldEnemy)) {
if (game.isNullEntity (newEnemy) && shieldedEnemies.length () > 0) { newEnemy = shieldEnemy;
nearestDistance = cr::sqrf (m_viewDistance);
for (const auto &shieldedEnemy : shieldedEnemies) {
float distance = shieldedEnemy->v.origin.distanceSq (pev->origin);
if (distance < nearestDistance) {
nearestDistance = distance;
newEnemy = shieldedEnemy;
}
}
} }
} }