diff --git a/Engine/source/T3D/AI/AIController.cpp b/Engine/source/T3D/AI/AIController.cpp index 89d1decd3..ad0243b18 100644 --- a/Engine/source/T3D/AI/AIController.cpp +++ b/Engine/source/T3D/AI/AIController.cpp @@ -609,7 +609,6 @@ void AIPlayerControllerData::resolveTriggerState(AIController* obj, Move* movePt } IMPLEMENT_CO_DATABLOCK_V1(AIWheeledVehicleControllerData); - // Build a Triangle .. calculate angle of rotation required to meet target.. // man there has to be a better way! >:) F32 AIWheeledVehicleControllerData::getSteeringAngle(AIController* obj, Point3F location) @@ -695,19 +694,13 @@ F32 AIWheeledVehicleControllerData::getSteeringAngle(AIController* obj, Point3F steerState = Left; } - F32 turnAdjust = myAngle - steering.x; - F32 throttle = wvo->getThrottle(); - if (throttle < 0.0f) + if (throttle < 0.0f && steerState != Straight) { - F32 reverseReduction = 0.25f; - if (steerState == Left) - steerState = Right; - else if (steerState == Right) - steerState = Left; - turnAdjust *= reverseReduction; - myAngle *= reverseReduction; + F32 reverseReduction = 0.25; + steering.x = steering.x * reverseReduction * throttle; } + F32 turnAdjust = myAngle - steering.x; F32 steer = 0; switch (steerState) @@ -746,5 +739,4 @@ void AIWheeledVehicleControllerData::resolveYaw(AIController* obj, Point3F locat movePtr->yaw = getSteeringAngle(obj, location); } }; -void AIWheeledVehicleControllerData::resolveTriggerState(AIController* obj, Move* movePtr) {}; #endif //_AICONTROLLER_H_ diff --git a/Engine/source/T3D/AI/AIController.h b/Engine/source/T3D/AI/AIController.h index 43c9be04c..5e8b8bf0e 100644 --- a/Engine/source/T3D/AI/AIController.h +++ b/Engine/source/T3D/AI/AIController.h @@ -161,7 +161,8 @@ public: resolveStuckPtr.bind(this, &AIControllerData::resolveStuck); }; ~AIControllerData() {}; - + void packData(BitStream* stream) override {}; + void unpackData(BitStream* stream) override {}; static void initPersistFields(); DECLARE_CONOBJECT(AIControllerData); @@ -222,11 +223,9 @@ public: AIWheeledVehicleControllerData() { resolveYawPtr.bind(this, &AIWheeledVehicleControllerData::resolveYaw); - resolveTriggerStatePtr.bind(this, &AIWheeledVehicleControllerData::resolveTriggerState); } F32 getSteeringAngle(AIController* obj, Point3F location); void resolveYaw(AIController* obj, Point3F location, Move* movePtr); - void resolveTriggerState(AIController* obj, Move* movePtr); DECLARE_CONOBJECT(AIWheeledVehicleControllerData); }; #endif // TORQUE_NAVIGATION_ENABLED diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 18a0560b7..ee715517b 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -1744,7 +1744,6 @@ bool Player::onAdd() world ); mPhysicsRep->setTransform( getTransform() ); } - mAIController = NULL; return true; } @@ -2287,6 +2286,7 @@ DefineEngineMethod(Player, getAIController, AIController*, (), , "") bool Player::getAIMove(Move* move) { + if (!isServerObject()) return false; if (mAIController) { mAIController->getAIMove(move); //actual result diff --git a/Engine/source/T3D/vehicles/vehicle.cpp b/Engine/source/T3D/vehicles/vehicle.cpp index ac01b74e7..e6a86baad 100644 --- a/Engine/source/T3D/vehicles/vehicle.cpp +++ b/Engine/source/T3D/vehicles/vehicle.cpp @@ -147,6 +147,7 @@ VehicleData::VehicleData() collDamageThresholdVel = 20; collDamageMultiplier = 0.05f; enablePhysicsRep = true; + mControlMap = StringTable->EmptyString(); mAIControllData = NULL; } @@ -505,16 +506,17 @@ void Vehicle::processTick(const Move* move) { PROFILE_SCOPE( Vehicle_ProcessTick ); - ShapeBase::processTick(move); - if ( isMounted() ) - return; - // If we're not being controlled by a client, let the // AI sub-module get a chance at producing a move. Move aiMove; if (!move && isServerObject() && getAIMove(&aiMove)) move = &aiMove; + ShapeBase::processTick(move); + if ( isMounted() ) + return; + + // Warp to catch up to server if (mDelta.warpCount < mDelta.warpTicks) { @@ -1249,6 +1251,7 @@ bool Vehicle::setAIController(SimObjectId controller) bool Vehicle::getAIMove(Move* move) { + if (!isServerObject()) return false; if (mAIController) { mAIController->getAIMove(move); //actual result