This commit is contained in:
Your Name 2020-08-29 12:58:03 -06:00
parent 4ad64f4ae4
commit 054397f7da
2 changed files with 37 additions and 21 deletions

View File

@ -2085,10 +2085,13 @@ walk()
} }
} }
isScriptGoal = false;
if(isDefined(self.bot.script_goal) && !hasTarget) if(isDefined(self.bot.script_goal) && !hasTarget)
{ {
goal = self.bot.script_goal; goal = self.bot.script_goal;
dist = self.bot.script_goal_dist; dist = self.bot.script_goal_dist;
isScriptGoal = true;
} }
else else
{ {
@ -2098,7 +2101,7 @@ walk()
self notify("new_goal"); self notify("new_goal");
} }
self doWalk(goal, dist); self doWalk(goal, dist, isScriptGoal);
self.bot.towards_goal = undefined; self.bot.towards_goal = undefined;
self.bot.next_wp = -1; self.bot.next_wp = -1;
self.bot.second_next_wp = -1; self.bot.second_next_wp = -1;
@ -2146,8 +2149,6 @@ watchOnGoal(goal, dis)
while(DistanceSquared(self.origin, goal) > dis) while(DistanceSquared(self.origin, goal) > dis)
wait 0.05; wait 0.05;
if (isDefined(self.bot.script_goal) && DistanceSquared(self.bot.script_goal, goal) <= dis)
self notify("script_goal");
self notify("goal"); self notify("goal");
} }
@ -2208,10 +2209,24 @@ killWalkOnEvents()
self notify("kill_goal"); self notify("kill_goal");
} }
doWalkScriptNotify()
{
self endon("kill_goal");
self endon("disconnect");
self endon("death");
ret = self waittill_any_return("goal", "bad_path");
if (ret == "goal")
self notify("script_goal");
else
self notify("script_bad_path");
}
/* /*
Will walk to the given goal when dist near. Uses AStar path finding with the level's nodes. Will walk to the given goal when dist near. Uses AStar path finding with the level's nodes.
*/ */
doWalk(goal, dist) doWalk(goal, dist, isScriptGoal)
{ {
self endon("kill_goal"); self endon("kill_goal");
self endon("goal");//so that the watchOnGoal notify can happen same frame, not a frame later self endon("goal");//so that the watchOnGoal notify can happen same frame, not a frame later
@ -2219,6 +2234,8 @@ doWalk(goal, dist)
distsq = dist*dist; distsq = dist*dist;
self thread killWalkOnEvents(); self thread killWalkOnEvents();
self thread watchOnGoal(goal, distsq); self thread watchOnGoal(goal, distsq);
if (isScriptGoal)
self thread doWalkScriptNotify();
current = self initAStar(goal); current = self initAStar(goal);
while(current >= 0) while(current >= 0)

View File

@ -1042,9 +1042,9 @@ bot_inc_bots(obj, unreach)
obj.bots++; obj.bots++;
ret = self waittill_any_return("death", "disconnect", "bad_path", "goal", "bot_inc_bots"); ret = self waittill_any_return("death", "disconnect", "script_bad_path", "script_goal", "bot_inc_bots");
if (isDefined(obj) && (ret != "bad_path" || !isDefined(unreach))) if (isDefined(obj) && (ret != "script_bad_path" || !isDefined(unreach)))
obj.bots--; obj.bots--;
} }
@ -1052,8 +1052,8 @@ bots_watch_touch_obj(obj)
{ {
self endon ("death"); self endon ("death");
self endon ("disconnect"); self endon ("disconnect");
self endon ("bad_path"); self endon ("script_bad_path");
self endon ("goal"); self endon ("script_goal");
for (;;) for (;;)
{ {
@ -1061,14 +1061,13 @@ bots_watch_touch_obj(obj)
if (!isDefined(obj)) if (!isDefined(obj))
{ {
self notify("bad_path"); self notify("script_bad_path");
return; return;
} }
if (self IsTouching(obj)) if (self IsTouching(obj))
{ {
self notify("script_goal"); self notify("script_goal");
self notify("goal");
return; return;
} }
} }
@ -1384,7 +1383,7 @@ bot_equipment_kill_think()
self SetScriptGoal(target.origin, 16); self SetScriptGoal(target.origin, 16);
self thread bots_watch_touch_obj( target ); self thread bots_watch_touch_obj( target );
path = self waittill_any_return("bad_path", "goal", "script_goal"); path = self waittill_any_return("script_bad_path", "script_goal");
self ClearScriptGoal(); self ClearScriptGoal();
@ -1508,7 +1507,7 @@ bot_listen_to_steps()
} }
self SetScriptGoal( heard.origin, 64 ); self SetScriptGoal( heard.origin, 64 );
self waittill_any( "goal", "bad_path" ); self waittill_any( "script_goal", "script_bad_path" );
self ClearScriptGoal(); self ClearScriptGoal();
} }
} }
@ -1570,7 +1569,7 @@ bot_uav_think()
{ {
self SetScriptGoal( player.origin, 128 ); self SetScriptGoal( player.origin, 128 );
self waittill_any( "goal", "bad_path" ); self waittill_any( "script_goal", "script_bad_path" );
self ClearScriptGoal(); self ClearScriptGoal();
break; break;
@ -1601,7 +1600,7 @@ bot_revenge_think()
return; return;
self SetScriptGoal( self.killerLocation, 64 ); self SetScriptGoal( self.killerLocation, 64 );
self waittill_any( "goal", "bad_path" ); self waittill_any( "script_goal", "script_bad_path" );
self ClearScriptGoal(); self ClearScriptGoal();
} }
} }
@ -1610,8 +1609,8 @@ turret_death_monitor(turret)
{ {
self endon ("death"); self endon ("death");
self endon ("disconnect"); self endon ("disconnect");
self endon ("bad_path"); self endon ("script_bad_path");
self endon ("goal"); self endon ("script_goal");
for (;;) for (;;)
{ {
@ -1627,7 +1626,7 @@ turret_death_monitor(turret)
break; break;
} }
self notify("bad_path"); self notify("script_bad_path");
} }
bot_turret_attack( enemy ) bot_turret_attack( enemy )
@ -1731,7 +1730,7 @@ bot_turret_think()
self SetScriptGoal(turret.origin, 16); self SetScriptGoal(turret.origin, 16);
self thread turret_death_monitor( turret ); self thread turret_death_monitor( turret );
self waittill_any_return("bad_path", "goal"); self waittill_any_return("script_bad_path", "script_goal");
self ClearScriptGoal(); self ClearScriptGoal();
} }
@ -1825,7 +1824,7 @@ bot_crate_think()
self SetScriptGoal(crate.origin, 32); self SetScriptGoal(crate.origin, 32);
self thread bots_watch_touch_obj(crate); self thread bots_watch_touch_obj(crate);
path = self waittill_any_return("bad_path", "goal", "script_goal"); path = self waittill_any_return("script_bad_path", "script_goal");
self.bot_lock_goal = false; self.bot_lock_goal = false;
self ClearScriptGoal(); self ClearScriptGoal();
@ -2266,7 +2265,7 @@ bot_killstreak_think()
continue; continue;
} }
self waittill_any_timeout( 15, "bad_path", "crate_physics_done" ); self waittill_any_timeout( 15, "script_bad_path", "crate_physics_done" );
self ClearScriptGoal(); self ClearScriptGoal();
} }
else else