Skip to content

Commit

Permalink
combat: only move back if there's no wall behind the bot
Browse files Browse the repository at this point in the history
  • Loading branch information
jeefo committed Jun 1, 2024
1 parent d121f2a commit 587064e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
1 change: 1 addition & 0 deletions inc/yapb.h
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,7 @@ class Bot final {
bool isBlockedRight ();
bool checkWallOnLeft ();
bool checkWallOnRight ();
bool checkWallOnBehind ();
bool updateNavigation ();
bool isEnemyThreat ();
bool isWeaponRestricted (int wid);
Expand Down
10 changes: 8 additions & 2 deletions src/combat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1314,8 +1314,14 @@ void Bot::attackMovement () {

// only take cover when bomb is not planted and enemy can see the bot or the bot is VIP
if (!game.is (GameFlags::CSDM)) {
if (m_retreatTime < game.time () && (m_states & Sense::SeeingEnemy) && approach < 30 && !bots.isBombPlanted () && (isInViewCone (m_enemy->v.origin) || m_isVIP)) {
startTask (Task::SeekCover, TaskPri::SeekCover, kInvalidNodeIndex, 0.0f, true);
if ((m_states & Sense::SeeingEnemy) && approach < 30 && !bots.isBombPlanted () && (isInViewCone (m_enemy->v.origin) || m_isVIP)) {
if (m_retreatTime < game.time ()) {
startTask (Task::SeekCover, TaskPri::SeekCover, kInvalidNodeIndex, 0.0f, true);
}

if (!checkWallOnBehind ()) {
m_moveSpeed = -pev->maxspeed;
}
}
else if (approach < 50) {
m_moveSpeed = 0.0f;
Expand Down
19 changes: 16 additions & 3 deletions src/navigate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,7 @@ void Bot::checkTerrain (float movedDistance, const Vector &dirNormal) {
dirLeft = true;
}
const auto &testDir = m_moveSpeed > 0.0f ? forward : -forward;
constexpr float kBlockDistance = 42.0f;
constexpr float kBlockDistance = 52.0f;

// now check which side is blocked
src = pev->origin + right * kBlockDistance;
Expand Down Expand Up @@ -2987,7 +2987,7 @@ bool Bot::isBlockedRight () {

bool Bot::checkWallOnLeft () {
TraceResult tr {};
game.testLine (pev->origin, pev->origin - pev->angles.right () * 42.0f, TraceIgnore::Monsters, ent (), &tr);
game.testLine (pev->origin, pev->origin - pev->angles.right () * 52.0f, TraceIgnore::Monsters, ent (), &tr);

// check if the trace hit something...
if (tr.flFraction < 1.0f) {
Expand All @@ -3000,7 +3000,20 @@ bool Bot::checkWallOnRight () {
TraceResult tr {};

// do a trace to the right...
game.testLine (pev->origin, pev->origin + pev->angles.right () * 42.0f, TraceIgnore::Monsters, ent (), &tr);
game.testLine (pev->origin, pev->origin + pev->angles.right () * 52.0f, TraceIgnore::Monsters, ent (), &tr);

// check if the trace hit something...
if (tr.flFraction < 1.0f) {
return true;
}
return false;
}

bool Bot::checkWallOnBehind () {
TraceResult tr {};

// do a trace to the right...
game.testLine (pev->origin, pev->origin - pev->angles.forward () * 52.0f, TraceIgnore::Monsters, ent (), &tr);

// check if the trace hit something...
if (tr.flFraction < 1.0f) {
Expand Down

0 comments on commit 587064e

Please sign in to comment.