target cleanup

This commit is contained in:
INeedBots 2020-10-31 14:33:20 -06:00
parent 70e734b121
commit d6ea6e0d35

View File

@ -1621,6 +1621,48 @@ updateBones()
} }
} }
createTargetObj(ent, theTime)
{
obj = spawnStruct();
obj.entity = ent;
obj.last_seen_pos = (0, 0, 0);
obj.dist = 0;
obj.time = theTime;
obj.trace_time = 0;
obj.no_trace_time = 0;
obj.trace_time_time = 0;
obj.rand = randomInt(100);
obj.didlook = false;
obj.isplay = isPlayer(ent);
obj.offset = undefined;
obj.bone = undefined;
obj.aim_offset = undefined;
return obj;
}
updateAimOffset(obj)
{
}
targetObjUpdateTraced(obj, daDist, ent, theTime)
{
obj.no_trace_time = 0;
obj.trace_time += 50;
obj.dist = daDist;
obj.last_seen_pos = ent.origin;
obj.trace_time_time = theTime;
updateAimOffset(obj);
}
targetObjUpdateNoTrace(obj)
{
obj.no_trace_time += 50;
obj.trace_time = 0;
obj.didlook = false;
}
/* /*
The main target thread, will update the bot's main target. Will auto target enemy players and handle script targets. The main target thread, will update the bot's main target. Will auto target enemy players and handle script targets.
*/ */
@ -1667,8 +1709,14 @@ target()
hasTarget = false; hasTarget = false;
} }
if(isDefined(self.bot.script_target)) playercount = level.players.size;
for(i = -1; i < playercount; i++)
{ {
if (i == -1)
{
if (!isDefined(self.bot.script_target))
continue;
ent = self.bot.script_target; ent = self.bot.script_target;
key = ent getEntityNumber()+""; key = ent getEntityNumber()+"";
daDist = distanceSquared(self.origin, ent.origin); daDist = distanceSquared(self.origin, ent.origin);
@ -1678,107 +1726,33 @@ target()
if (isDefined(self.bot.script_target_offset)) if (isDefined(self.bot.script_target_offset))
entOrigin += self.bot.script_target_offset; entOrigin += self.bot.script_target_offset;
for(;;)
{
if(SmokeTrace(myEye, entOrigin, level.smokeRadius) && bulletTracePassed(myEye, entOrigin, false, ent)) if(SmokeTrace(myEye, entOrigin, level.smokeRadius) && bulletTracePassed(myEye, entOrigin, false, ent))
{ {
if(!isObjDef) if(!isObjDef)
{ {
obj = spawnStruct(); obj = createTargetObj(ent, theTime);
obj.entity = ent;
obj.last_seen_pos = (0, 0, 0);
obj.dist = 0;
obj.time = theTime;
obj.trace_time = 0;
obj.no_trace_time = 0;
obj.trace_time_time = 0;
obj.rand = randomInt(100);
obj.didlook = false;
obj.isplay = isPlayer(ent);
obj.offset = self.bot.script_target_offset; obj.offset = self.bot.script_target_offset;
obj.bone = undefined;
obj.aim_offset = undefined;
self.bot.targets[key] = obj; self.bot.targets[key] = obj;
} }
obj.no_trace_time = 0; targetObjUpdateTraced(obj, daDist, ent, theTime);
obj.trace_time += 50;
obj.dist = daDist;
obj.last_seen_pos = ent.origin;
obj.trace_time_time = theTime;
} }
else else
{ {
if(!isObjDef) if(!isObjDef)
break; continue;
obj.no_trace_time += 50; targetObjUpdateNoTrace(obj);
obj.trace_time = 0;
obj.didlook = false;
if(obj.no_trace_time > rememberTime) if(obj.no_trace_time > rememberTime)
{ {
self.bot.targets[key] = undefined; self.bot.targets[key] = undefined;
break; continue;
} }
} }
if(theTime - obj.time < initReactTime)
break;
timeDiff = theTime - obj.trace_time_time;
if(timeDiff < bestTime)
{
bestTargets = [];
bestTime = timeDiff;
} }
else
if(timeDiff == bestTime)
bestTargets[key] = obj;
break;
}
}
if(isDefined(self.bot.target_this_frame))
{
player = self.bot.target_this_frame;
key = player getEntityNumber()+"";
obj = self.bot.targets[key];
daDist = distanceSquared(self.origin, player.origin);
if(!isDefined(obj))
{
obj = spawnStruct();
obj.entity = player;
obj.last_seen_pos = (0, 0, 0);
obj.dist = 0;
obj.time = theTime;
obj.trace_time = 0;
obj.no_trace_time = 0;
obj.trace_time_time = 0;
obj.rand = randomInt(100);
obj.didlook = false;
obj.isplay = isPlayer(player);
obj.offset = undefined;
obj.bone = undefined;
obj.aim_offset = undefined;
self.bot.targets[key] = obj;
}
obj.no_trace_time = 0;
obj.trace_time += 50;
obj.dist = daDist;
obj.last_seen_pos = player.origin;
obj.trace_time_time = theTime;
self.bot.target_this_frame = undefined;
}
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{ {
player = level.players[i]; player = level.players[i];
@ -1825,42 +1799,30 @@ target()
(isObjDef && obj.trace_time))); (isObjDef && obj.trace_time)));
} }
if (isDefined(self.bot.target_this_frame) && self.bot.target_this_frame == player)
{
self.bot.target_this_frame = undefined;
canTargetPlayer = true;
}
if(canTargetPlayer) if(canTargetPlayer)
{ {
if(!isObjDef) if(!isObjDef)
{ {
obj = spawnStruct(); obj = createTargetObj(player, theTime);
obj.entity = player;
obj.last_seen_pos = (0, 0, 0);
obj.dist = 0;
obj.time = theTime;
obj.trace_time = 0;
obj.no_trace_time = 0;
obj.trace_time_time = 0;
obj.rand = randomInt(100);
obj.didlook = false;
obj.isplay = isPlayer(player);
obj.offset = undefined;
obj.bone = undefined;
obj.aim_offset = undefined;
self.bot.targets[key] = obj; self.bot.targets[key] = obj;
} }
obj.no_trace_time = 0; targetObjUpdateTraced(obj, daDist, player, theTime);
obj.trace_time += 50;
obj.dist = daDist;
obj.last_seen_pos = player.origin;
obj.trace_time_time = theTime;
} }
else else
{ {
if(!isObjDef) if(!isObjDef)
continue; continue;
obj.no_trace_time += 50; targetObjUpdateNoTrace(obj);
obj.trace_time = 0;
obj.didlook = false;
if(obj.no_trace_time > rememberTime) if(obj.no_trace_time > rememberTime)
{ {
@ -1868,6 +1830,7 @@ target()
continue; continue;
} }
} }
}
if(theTime - obj.time < initReactTime) if(theTime - obj.time < initReactTime)
continue; continue;