00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef PX_VEHICLE_NWDRIVE_H
00031 #define PX_VEHICLE_NWDRIVE_H
00032
00036 #include "vehicle/PxVehicleDrive.h"
00037 #include "vehicle/PxVehicleWheels.h"
00038 #include "vehicle/PxVehicleComponents.h"
00039
00040 #if !PX_DOXYGEN
00041 namespace physx
00042 {
00043 #endif
00044
00045 struct PxFilterData;
00046 class PxGeometry;
00047 class PxPhysics;
00048 class PxBatchQuery;
00049 class PxVehicleDrivableSurfaceToTireFrictionPairs;
00050 class PxShape;
00051 class PxMaterial;
00052 class PxRigidDynamic;
00053
00059 class PxVehicleDriveSimDataNW : public PxVehicleDriveSimData
00060 {
00061
00062
00063
00064
00065
00066
00067 public:
00068
00069 friend class PxVehicleDriveNW;
00070
00071 PxVehicleDriveSimDataNW()
00072 : PxVehicleDriveSimData()
00073 {
00074 }
00075
00079 const PxVehicleDifferentialNWData& getDiffData() const
00080 {
00081 return mDiff;
00082 }
00083
00088 void setDiffData(const PxVehicleDifferentialNWData& diff);
00089
00090 private:
00091
00096 PxVehicleDifferentialNWData mDiff;
00097
00103 bool isValid() const;
00104
00105
00106 public:
00107 PxVehicleDriveSimDataNW(const PxEMPTY) : PxVehicleDriveSimData(PxEmpty), mDiff(PxEmpty) {}
00108 static void getBinaryMetaData(PxOutputStream& stream);
00109
00110 };
00111 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDriveSimDataNW) & 15));
00112
00113
00119 struct PxVehicleDriveNWControl
00120 {
00121 enum Enum
00122 {
00123 eANALOG_INPUT_ACCEL=0,
00124 eANALOG_INPUT_BRAKE,
00125 eANALOG_INPUT_HANDBRAKE,
00126 eANALOG_INPUT_STEER_LEFT,
00127 eANALOG_INPUT_STEER_RIGHT,
00128 eMAX_NB_DRIVENW_ANALOG_INPUTS
00129 };
00130 };
00131
00135 class PxVehicleDriveNW : public PxVehicleDrive
00136 {
00137
00138
00139
00140
00141
00142
00143 public:
00144
00145 friend class PxVehicleUpdate;
00146
00156 static PxVehicleDriveNW* allocate(const PxU32 nbWheels);
00157
00162 void free();
00163
00174 void setup
00175 (PxPhysics* physics, PxRigidDynamic* vehActor,
00176 const PxVehicleWheelsSimData& wheelsData, const PxVehicleDriveSimDataNW& driveData,
00177 const PxU32 nbWheels);
00178
00190 static PxVehicleDriveNW* create
00191 (PxPhysics* physics, PxRigidDynamic* vehActor,
00192 const PxVehicleWheelsSimData& wheelsData, const PxVehicleDriveSimDataNW& driveData,
00193 const PxU32 nbWheels);
00194
00202 void setToRestState();
00203
00208 PxVehicleDriveSimDataNW mDriveSimData;
00209
00210 private:
00211
00215 bool isValid() const;
00216
00217
00218 public:
00219 PxVehicleDriveNW(PxBaseFlags baseFlags) : PxVehicleDrive(baseFlags), mDriveSimData(PxEmpty) {}
00220 PxVehicleDriveNW();
00221 ~PxVehicleDriveNW(){}
00222 static PxVehicleDriveNW* createObject(PxU8*& address, PxDeserializationContext& context);
00223 static void getBinaryMetaData(PxOutputStream& stream);
00224 virtual const char* getConcreteTypeName() const { return "PxVehicleDriveNW"; }
00225 virtual bool isKindOf(const char* name) const { return !::strcmp("PxVehicleDriveNW", name) || PxBase::isKindOf(name); }
00226
00227 };
00228 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDriveNW) & 15));
00229
00230
00231
00232 #if !PX_DOXYGEN
00233 }
00234 #endif
00235
00237 #endif //PX_VEHICLE_NWDRIVE_H