X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fbot%2Fdefault%2Fnavigation.qc;h=c666fa94e3f308ff4694ba5e08a938e202b661b5;hb=6171e1f68bdef7b2c484534d30ce99b25cb235b0;hp=4c5368882d01eff6694ab89e736cc27329bbd9f2;hpb=a046ca4218a1e2ea284551ea2500f9b62b608187;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/bot/default/navigation.qc b/qcsrc/server/bot/default/navigation.qc index 4c5368882..c666fa94e 100644 --- a/qcsrc/server/bot/default/navigation.qc +++ b/qcsrc/server/bot/default/navigation.qc @@ -47,6 +47,11 @@ bool navigation_goalrating_timeout(entity this) return this.bot_strategytime < time; } +void navigation_goalrating_timeout_extend_if_needed(entity this, float seconds) +{ + this.bot_strategytime = max(this.bot_strategytime, time + seconds); +} + #define MAX_CHASE_DISTANCE 700 bool navigation_goalrating_timeout_can_be_anticipated(entity this) { @@ -917,7 +922,7 @@ entity navigation_findnearestwaypoint_withdist_except(entity ent, float walkfrom vector pm2 = ent.origin + ent.maxs; // do two scans, because box test is cheaper - IL_EACH(g_waypoints, it != ent && it != except && !(it.wpflags & WAYPOINTFLAG_TELEPORT), + IL_EACH(g_waypoints, it != ent && it != except && !(it.wpflags & (WAYPOINTFLAG_TELEPORT | WAYPOINTFLAG_JUMP)), { if(boxesoverlap(pm1, pm2, it.absmin, it.absmax)) { @@ -948,7 +953,7 @@ entity navigation_findnearestwaypoint_withdist_except(entity ent, float walkfrom waypoint_clearlinks(ent); // initialize wpXXmincost fields IL_EACH(g_waypoints, it != ent, { - if(walkfromwp && (it.wpflags & WAYPOINTFLAG_NORELINK)) + if (walkfromwp && (it.wpflags & WPFLAGMASK_NORELINK)) continue; set_tracewalk_dest(ent, it.origin, false); @@ -964,7 +969,7 @@ entity navigation_findnearestwaypoint_withdist_except(entity ent, float walkfrom // box check failed, try walk IL_EACH(g_waypoints, it != ent, { - if(walkfromwp && (it.wpflags & WAYPOINTFLAG_NORELINK)) + if (walkfromwp && (it.wpflags & WPFLAGMASK_NORELINK)) continue; v = it.origin; @@ -1332,10 +1337,10 @@ void navigation_routerating(entity this, entity e, float f, float rangebias) t += xydistance / autocvar_g_jetpack_maxspeed_side; fuel = t * autocvar_g_jetpack_fuel * 0.8; - LOG_DEBUG("jetpack ai: required fuel ", ftos(fuel), ", have ", ftos(GetResourceAmount(this, RESOURCE_FUEL))); + LOG_DEBUG("jetpack ai: required fuel ", ftos(fuel), ", have ", ftos(GetResource(this, RES_FUEL))); // enough fuel ? - if(GetResourceAmount(this, RESOURCE_FUEL) > fuel || (this.items & IT_UNLIMITED_WEAPON_AMMO)) + if(GetResource(this, RES_FUEL) > fuel || (this.items & IT_UNLIMITED_WEAPON_AMMO)) { // Estimate cost // (as onground costs calculation is mostly based on distances, here we do the same establishing some relationship @@ -1577,7 +1582,7 @@ bool navigation_shortenpath(entity this) next = this.goalstack01; // if for some reason the bot is closer to the next goal, pop the current one - if (!IS_MOVABLE(next) // already checked in the previous case + if (!IS_MOVABLE(next) && !(this.goalcurrent.wpflags & (WAYPOINTFLAG_TELEPORT | WAYPOINTFLAG_JUMP)) && vlen2(this.goalcurrent.origin - next.origin) > vlen2(next.origin - this.origin) && checkpvs(this.origin + this.view_ofs, next)) { @@ -1771,7 +1776,7 @@ entity navigation_get_really_close_waypoint(entity this) if(vdist(wp.origin - this.origin, >, 50)) { wp = NULL; - IL_EACH(g_waypoints, !(it.wpflags & WAYPOINTFLAG_TELEPORT), + IL_EACH(g_waypoints, !(it.wpflags & (WAYPOINTFLAG_TELEPORT | WAYPOINTFLAG_JUMP)), { if(vdist(it.origin - this.origin, <, 50)) { @@ -1903,7 +1908,7 @@ void navigation_unstuck(entity this) { // evaluate the next goal on the queue float d = vlen2(this.origin - bot_waypoint_queue_goal.origin); - LOG_DEBUG(this.netname, " evaluating ", bot_waypoint_queue_goal.classname, " with distance ", ftos(d)); + LOG_DEBUG(this.netname, " evaluating ", bot_waypoint_queue_goal.classname, " with squared distance ", ftos(d)); set_tracewalk_dest(bot_waypoint_queue_goal, this.origin, false); if (tracewalk(this, this.origin, STAT(PL_MIN, this), STAT(PL_MAX, this), tracewalk_dest, tracewalk_dest_height, bot_navigation_movemode))