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,205 +1709,126 @@ target()
hasTarget = false; hasTarget = false;
} }
if(isDefined(self.bot.script_target)) playercount = level.players.size;
for(i = -1; i < playercount; i++)
{ {
ent = self.bot.script_target; if (i == -1)
key = ent getEntityNumber()+"";
daDist = distanceSquared(self.origin, ent.origin);
obj = self.bot.targets[key];
isObjDef = isDefined(obj);
entOrigin = ent.origin;
if (isDefined(self.bot.script_target_offset))
entOrigin += self.bot.script_target_offset;
for(;;)
{ {
if (!isDefined(self.bot.script_target))
continue;
ent = self.bot.script_target;
key = ent getEntityNumber()+"";
daDist = distanceSquared(self.origin, ent.origin);
obj = self.bot.targets[key];
isObjDef = isDefined(obj);
entOrigin = ent.origin;
if (isDefined(self.bot.script_target_offset))
entOrigin += self.bot.script_target_offset;
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;
}
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];
if(player == self)
continue;
key = player getEntityNumber()+"";
obj = self.bot.targets[key];
daDist = distanceSquared(self.origin, player.origin);
isObjDef = isDefined(obj);
if((level.teamBased && self.team == player.team) || player.sessionstate != "playing" || !isReallyAlive(player) || (daDist > distsq && !usingRemote))
{
if(isObjDef)
self.bot.targets[key] = undefined;
continue;
}
canTargetPlayer = false;
if (usingRemote)
{
canTargetPlayer = (bulletTracePassed(myEye, player getTagOrigin( "j_head" ), false, vehEnt)
&& !player _hasPerk("specialty_coldblooded"));
} }
else else
{ {
targetHead = player getTagOrigin( "j_head" ); player = level.players[i];
targetAnkleLeft = player getTagOrigin( "j_ankle_le" );
targetAnkleRight = player getTagOrigin( "j_ankle_ri" );
canTargetPlayer = ((distanceSquared(BulletTrace(myEye, targetHead, false, self)["position"], targetHead) < 0.05 || if(player == self)
distanceSquared(BulletTrace(myEye, targetAnkleLeft, false, self)["position"], targetAnkleLeft) < 0.05 || continue;
distanceSquared(BulletTrace(myEye, targetAnkleRight, false, self)["position"], targetAnkleRight) < 0.05)
key = player getEntityNumber()+"";
&& (distanceSquared(PhysicsTrace( myEye, targetHead, false, self ), targetHead) < 0.05 || obj = self.bot.targets[key];
distanceSquared(PhysicsTrace( myEye, targetAnkleLeft, false, self ), targetAnkleLeft) < 0.05 || daDist = distanceSquared(self.origin, player.origin);
distanceSquared(PhysicsTrace( myEye, targetAnkleRight, false, self ), targetAnkleRight) < 0.05) isObjDef = isDefined(obj);
if((level.teamBased && self.team == player.team) || player.sessionstate != "playing" || !isReallyAlive(player) || (daDist > distsq && !usingRemote))
&& (SmokeTrace(myEye, player.origin, level.smokeRadius) ||
daDist < level.bots_maxKnifeDistance*4)
&& (getConeDot(player.origin, self.origin, myAngles) >= myFov ||
(isObjDef && obj.trace_time)));
}
if(canTargetPlayer)
{
if(!isObjDef)
{ {
obj = spawnStruct(); if(isObjDef)
obj.entity = player; self.bot.targets[key] = undefined;
obj.last_seen_pos = (0, 0, 0);
obj.dist = 0; continue;
obj.time = theTime; }
obj.trace_time = 0;
obj.no_trace_time = 0; canTargetPlayer = false;
obj.trace_time_time = 0;
obj.rand = randomInt(100); if (usingRemote)
obj.didlook = false; {
obj.isplay = isPlayer(player); canTargetPlayer = (bulletTracePassed(myEye, player getTagOrigin( "j_head" ), false, vehEnt)
obj.offset = undefined; && !player _hasPerk("specialty_coldblooded"));
obj.bone = undefined; }
obj.aim_offset = undefined; else
{
targetHead = player getTagOrigin( "j_head" );
targetAnkleLeft = player getTagOrigin( "j_ankle_le" );
targetAnkleRight = player getTagOrigin( "j_ankle_ri" );
canTargetPlayer = ((distanceSquared(BulletTrace(myEye, targetHead, false, self)["position"], targetHead) < 0.05 ||
distanceSquared(BulletTrace(myEye, targetAnkleLeft, false, self)["position"], targetAnkleLeft) < 0.05 ||
distanceSquared(BulletTrace(myEye, targetAnkleRight, false, self)["position"], targetAnkleRight) < 0.05)
&& (distanceSquared(PhysicsTrace( myEye, targetHead, false, self ), targetHead) < 0.05 ||
distanceSquared(PhysicsTrace( myEye, targetAnkleLeft, false, self ), targetAnkleLeft) < 0.05 ||
distanceSquared(PhysicsTrace( myEye, targetAnkleRight, false, self ), targetAnkleRight) < 0.05)
&& (SmokeTrace(myEye, player.origin, level.smokeRadius) ||
daDist < level.bots_maxKnifeDistance*4)
&& (getConeDot(player.origin, self.origin, myAngles) >= myFov ||
(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(!isObjDef)
{
obj = createTargetObj(player, theTime);
self.bot.targets[key] = obj;
}
targetObjUpdateTraced(obj, daDist, player, theTime);
}
else
{
if(!isObjDef)
continue;
self.bot.targets[key] = obj; targetObjUpdateNoTrace(obj);
}
if(obj.no_trace_time > rememberTime)
obj.no_trace_time = 0; {
obj.trace_time += 50; self.bot.targets[key] = undefined;
obj.dist = daDist; continue;
obj.last_seen_pos = player.origin; }
obj.trace_time_time = theTime;
}
else
{
if(!isObjDef)
continue;
obj.no_trace_time += 50;
obj.trace_time = 0;
obj.didlook = false;
if(obj.no_trace_time > rememberTime)
{
self.bot.targets[key] = undefined;
continue;
} }
} }