Browse Source

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

AzaezelX 8 months ago
parent
commit
e37ae27bc0
2 changed files with 8 additions and 3 deletions
  1. 5 0
      Engine/source/T3D/AI/AIAimTarget.cpp
  2. 3 3
      Engine/source/T3D/AI/AIController.cpp

+ 5 - 0
Engine/source/T3D/AI/AIAimTarget.cpp

@@ -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"
 

+ 3 - 3
Engine/source/T3D/AI/AIController.cpp

@@ -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))