Browse Source

behavioural change: feeding an AInfo an object with a 0 radius causes the class to fill in radius from that objects bounds box
also, vehicle direct hooks

AzaezelX 8 months ago
parent
commit
2d0bcbcf8d

+ 2 - 0
Engine/source/T3D/AI/AIInfo.cpp

@@ -39,6 +39,8 @@ AIInfo::AIInfo(AIController* controller, SimObjectPtr<SceneObject> objIn, F32 ra
    mPosition = mLastPos = objIn->getPosition();
    mRadius = radIn;
    mPosSet = false;
+   if (radIn == 0.0f)
+      mRadius = mMax(objIn->getObjBox().len_x(), objIn->getObjBox().len_y()) * 0.5;
 };
 
 AIInfo::AIInfo(AIController* controller, Point3F pointIn, F32 radIn)

+ 1 - 1
Engine/source/T3D/player.cpp

@@ -2264,7 +2264,7 @@ bool Player::setAIController(SimObjectId controller)
 {
    if (Sim::findObject(controller, mAIController) && mAIController->mControllerData)
    {
-      mAIController->setAIInfo(this, mAIController->mControllerData->mMoveTolerance);
+      mAIController->setAIInfo(this);
       return true;
    }
    Con::errorf("unable to find AIController : %i", controller);

+ 24 - 1
Engine/source/T3D/vehicles/vehicle.cpp

@@ -405,6 +405,7 @@ Vehicle::Vehicle()
    mWorkingQueryBoxCountDown = sWorkingQueryBoxStaleThreshold;
 
    mPhysicsRep = NULL;
+   mAIController = NULL;
 }
 
 U32 Vehicle::getCollisionMask()
@@ -471,7 +472,7 @@ bool Vehicle::onAdd()
 void Vehicle::onRemove()
 {
    SAFE_DELETE(mPhysicsRep);
-
+   if (mAIController) mAIController->deleteObject();
    U32 i=0;
 
    for( i=0; i<VehicleData::VC_NUM_DAMAGE_EMITTERS; i++ )
@@ -1219,3 +1220,25 @@ void Vehicle::_renderMuzzleVector( ObjectRenderInst *ri, SceneRenderState *state
 
    PrimBuild::end();
 }
+
+bool Vehicle::setAIController(SimObjectId controller)
+{
+   if (Sim::findObject(controller, mAIController) && mAIController->mControllerData)
+   {
+      mAIController->setAIInfo(this);
+      return true;
+   }
+   Con::errorf("unable to find AIController : %i", controller);
+   mAIController = NULL;
+   return false;
+}
+
+DefineEngineMethod(Vehicle, setAIController, bool, (S32 controller), , "")
+{
+   return object->setAIController(controller);
+}
+
+DefineEngineMethod(Vehicle, getAIController, AIController*, (), , "")
+{
+   return object->getAIController();
+}

+ 5 - 1
Engine/source/T3D/vehicles/vehicle.h

@@ -27,6 +27,8 @@
 #include "T3D/rigidShape.h"
 #endif
 
+#include "T3D/AI/AIController.h"
+
 class ParticleEmitter;
 class ParticleEmitterData;
 class ClippedPolyList;
@@ -98,7 +100,7 @@ class Vehicle : public RigidShape
    Point2F mSteering;
    F32 mThrottle;
    bool mJetting;
-
+   AIController* mAIController;
    GFXStateBlockRef  mSolidSB;
 
    SimObjectPtr<ParticleEmitter> mDamageEmitterList[VehicleData::VC_NUM_DAMAGE_EMITTERS];
@@ -148,6 +150,8 @@ public:
 
    Point2F getSteering() { return mSteering; };
    F32 getThrottle() { return mThrottle;};
+   bool setAIController(SimObjectId controller);
+   AIController* getAIController() { return mAIController; };
    /// Interpolates between move ticks @see processTick
    /// @param   dt   Change in time between the last call and this call to the function
    void advanceTime(F32 dt) override;