fix aim safeties to actually be safe, add an explicit clearAim script command

This commit is contained in:
AzaezelX 2025-04-16 17:58:30 -05:00
parent 14a03dfc6c
commit e37ae27bc0
2 changed files with 8 additions and 3 deletions

View file

@ -181,6 +181,11 @@ DefineEngineMethod(AIController, setAimObject, void, (const char* objName, Point
object->setAim(0, 0.0f, offset);
}
DefineEngineMethod(AIController, clearAim, void, (), , "clears the bot's target.")
{
object->clearAim();
}
DefineEngineMethod(AIController, getAimObject, S32, (), ,
"@brief Gets the object the AIPlayer is targeting.\n\n"

View file

@ -111,10 +111,10 @@ bool AIController::getAIMove(Move* movePtr)
// Orient towards the aim point, aim object, or towards
// our destination.
if (getAim()->mObj || getAim()->mPosSet || mMovement.mMoveState != ModeStop)
if (getAim() || mMovement.mMoveState != ModeStop)
{
// Update the aim position if we're aiming for an object or explicit position
if (getAim()->mObj || getAim()->mPosSet)
if (getAim())
mMovement.mAimLocation = getAim()->getPosition();
else
mMovement.mAimLocation = getNav()->mMoveDestination;
@ -129,7 +129,7 @@ bool AIController::getAIMove(Move* movePtr)
// Test for target location in sight if it's an object. The LOS is
// run from the eye position to the center of the object's bounding,
// which is not very accurate.
if (getAim()->mObj)
if (getAim() && getAim()->mObj)
{
GameBase* gbo = dynamic_cast<GameBase*>(getAIInfo()->mObj.getPointer());
if (getAim()->checkInLos(gbo))