MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/PhysX / updateTank

Method updateTank

physx/source/physxvehicle/src/PxVehicleUpdate.cpp:5889–6391  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5887}
5888
5889void PxVehicleUpdate::updateTank
5890(const PxF32 timestep,
5891 const PxVec3& gravity, const PxF32 gravityMagnitude, const PxF32 recipGravityMagnitude,
5892 const PxVehicleDrivableSurfaceToTireFrictionPairs& drivableSurfaceToTireFrictionPairs,
5893 PxVehicleDriveTank* vehDriveTank, PxVehicleWheelQueryResult* vehWheelQueryResults, PxVehicleConcurrentUpdateData* vehConcurrentUpdates)
5894{
5895 PX_SIMD_GUARD; // denorm exception in transformInertiaTensor()
5896
5897 PX_CHECK_AND_RETURN(
5898 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_ACCEL]>-0.01f &&
5899 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_ACCEL]<1.01f,
5900 "Illegal tank control value - accel must be in range (0,1)" );
5901 PX_CHECK_AND_RETURN(
5902 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_BRAKE_LEFT]>-0.01f &&
5903 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_BRAKE_LEFT]<1.01f,
5904 "Illegal tank control value - left brake must be in range (0,1)");
5905 PX_CHECK_AND_RETURN(
5906 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_BRAKE_RIGHT]>-0.01f &&
5907 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_BRAKE_RIGHT]<1.01f,
5908 "Illegal tank control right value - right brake must be in range (0,1)");
5909 PX_CHECK_AND_RETURN(
5910 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_LEFT]>-1.01f &&
5911 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_LEFT]<1.01f,
5912 "Illegal tank control value - left thrust must be in range (-1,1)");
5913 PX_CHECK_AND_RETURN(
5914 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_RIGHT]>-1.01f &&
5915 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_RIGHT]<1.01f,
5916 "Illegal tank control value - right thrust must be in range (-1,1)");
5917 PX_CHECK_AND_RETURN(
5918 PxVehicleDriveTankControlModel::eSPECIAL==vehDriveTank->mDriveModel ||
5919 (vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_LEFT]>-0.01f &&
5920 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_LEFT]<1.01f),
5921 "Illegal tank control value - left thrust must be in range (-1,1)");
5922 PX_CHECK_AND_RETURN(
5923 PxVehicleDriveTankControlModel::eSPECIAL==vehDriveTank->mDriveModel ||
5924 (vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_RIGHT]>-0.01f &&
5925 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_RIGHT]<1.01f),
5926 "Illegal tank control value - right thrust must be in range (-1,1)");
5927 PX_CHECK_AND_RETURN(
5928 PxVehicleDriveTankControlModel::eSPECIAL==vehDriveTank->mDriveModel ||
5929 0.0f==
5930 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_LEFT]*
5931 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_BRAKE_LEFT],
5932 "Illegal tank control value - thrust left and brake left simultaneously non-zero in standard drive mode");
5933 PX_CHECK_AND_RETURN(
5934 PxVehicleDriveTankControlModel::eSPECIAL==vehDriveTank->mDriveModel ||
5935 0.0f==
5936 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_THRUST_RIGHT]*
5937 vehDriveTank->mDriveDynData.mControlAnalogVals[PxVehicleDriveTankControl::eANALOG_INPUT_BRAKE_RIGHT],
5938 "Illegal tank control value - thrust right and brake right simultaneously non-zero in standard drive mode");
5939 PX_CHECK_AND_RETURN(
5940 !(vehDriveTank->getRigidDynamicActor()->getRigidBodyFlags() & PxRigidBodyFlag::eKINEMATIC),
5941 "Attempting to update a tank with a kinematic actor - this isn't allowed");
5942 PX_CHECK_AND_RETURN(
5943 NULL==vehWheelQueryResults || vehWheelQueryResults->nbWheelQueryResults >= vehDriveTank->mWheelsSimData.getNbWheels(),
5944 "nbWheelQueryResults must always be greater than or equal to number of wheels in corresponding vehicle");
5945
5946#if PX_CHECKED

Callers

nothing calls this directly

Calls 15

computeSignFunction · 0.85
PxMinFunction · 0.85
getTankControlValuesFunction · 0.85
processAutoBoxFunction · 0.85
processGearsFunction · 0.85
computeClutchStrengthFunction · 0.85
computeGearRatioFunction · 0.85
updateGraphDataGearRatioFunction · 0.85
PxAbsFunction · 0.85

Tested by

no test coverage detected