Skip to content

Commit

Permalink
IsWalkableTraceLineClear: Fixed deadlock (mutual collisions in traces…
Browse files Browse the repository at this point in the history
… leading to hang)
  • Loading branch information
s1lentq committed Feb 28, 2024
1 parent 5d2174f commit 9277582
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion regamedll/game_shared/bot/nav.h
Original file line number Diff line number Diff line change
Expand Up @@ -388,15 +388,21 @@ inline bool IsWalkableTraceLineClear(Vector &from, Vector &to, unsigned int flag
{
TraceResult result;
edict_t *pEntIgnore = nullptr;
edict_t *pEntPrev = nullptr;
Vector useFrom = from;

while (true)
const int maxTries = 50;
for (int t = 0; t < maxTries; ++t)
{
UTIL_TraceLine(useFrom, to, ignore_monsters, pEntIgnore, &result);

// if we hit a walkable entity, try again
if (result.flFraction != 1.0f && (result.pHit && IsEntityWalkable(VARS(result.pHit), flags)))
{
if (result.pHit == pEntPrev)
return false; // deadlock, give up

pEntPrev = pEntIgnore;
pEntIgnore = result.pHit;

// start from just beyond where we hit to avoid infinite loops
Expand Down

0 comments on commit 9277582

Please sign in to comment.