PxVehicleDrive4W.h
Go to the documentation of this file.00001 // This code contains NVIDIA Confidential Information and is disclosed to you 00002 // under a form of NVIDIA software license agreement provided separately to you. 00003 // 00004 // Notice 00005 // NVIDIA Corporation and its licensors retain all intellectual property and 00006 // proprietary rights in and to this software and related documentation and 00007 // any modifications thereto. Any use, reproduction, disclosure, or 00008 // distribution of this software and related documentation without an express 00009 // license agreement from NVIDIA Corporation is strictly prohibited. 00010 // 00011 // ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES 00012 // NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO 00013 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, 00014 // MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. 00015 // 00016 // Information and code furnished is believed to be accurate and reliable. 00017 // However, NVIDIA Corporation assumes no responsibility for the consequences of use of such 00018 // information or for any infringement of patents or other rights of third parties that may 00019 // result from its use. No license is granted by implication or otherwise under any patent 00020 // or patent rights of NVIDIA Corporation. Details are subject to change without notice. 00021 // This code supersedes and replaces all information previously supplied. 00022 // NVIDIA Corporation products are not authorized for use as critical 00023 // components in life support devices or systems without express written approval of 00024 // NVIDIA Corporation. 00025 // 00026 // Copyright (c) 2008-2017 NVIDIA Corporation. All rights reserved. 00027 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. 00028 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved. 00029 00030 #ifndef PX_VEHICLE_4WDRIVE_H 00031 #define PX_VEHICLE_4WDRIVE_H 00032 00036 #include "vehicle/PxVehicleDrive.h" 00037 #include "vehicle/PxVehicleWheels.h" 00038 #include "vehicle/PxVehicleComponents.h" 00039 00040 00041 #if !PX_DOXYGEN 00042 namespace physx 00043 { 00044 #endif 00045 00046 struct PxFilterData; 00047 class PxGeometry; 00048 class PxPhysics; 00049 class PxBatchQuery; 00050 class PxVehicleDrivableSurfaceToTireFrictionPairs; 00051 class PxShape; 00052 class PxMaterial; 00053 class PxRigidDynamic; 00054 00060 class PxVehicleDriveSimData4W : public PxVehicleDriveSimData 00061 { 00062 //= ATTENTION! ===================================================================================== 00063 // Changing the data layout of this class breaks the binary serialization format. See comments for 00064 // PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData 00065 // function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION 00066 // accordingly. 00067 //================================================================================================== 00068 public: 00069 00070 friend class PxVehicleDrive4W; 00071 00072 PxVehicleDriveSimData4W() 00073 : PxVehicleDriveSimData() 00074 { 00075 } 00076 00081 PX_FORCE_INLINE const PxVehicleDifferential4WData& getDiffData() const 00082 { 00083 return mDiff; 00084 } 00085 00090 PX_FORCE_INLINE const PxVehicleAckermannGeometryData& getAckermannGeometryData() const 00091 { 00092 return mAckermannGeometry; 00093 } 00094 00099 void setDiffData(const PxVehicleDifferential4WData& diff); 00100 00105 void setAckermannGeometryData(const PxVehicleAckermannGeometryData& ackermannData); 00106 00107 private: 00108 00113 PxVehicleDifferential4WData mDiff; 00114 00119 PxVehicleAckermannGeometryData mAckermannGeometry; 00120 00126 bool isValid() const; 00127 00128 //serialization 00129 public: 00130 PxVehicleDriveSimData4W(const PxEMPTY) : PxVehicleDriveSimData(PxEmpty), mDiff(PxEmpty), mAckermannGeometry(PxEmpty) {} 00131 static void getBinaryMetaData(PxOutputStream& stream); 00132 //~serialization 00133 }; 00134 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDriveSimData4W) & 15)); 00135 00136 00137 00144 struct PxVehicleDrive4WWheelOrder 00145 { 00146 enum Enum 00147 { 00148 eFRONT_LEFT=0, 00149 eFRONT_RIGHT, 00150 eREAR_LEFT, 00151 eREAR_RIGHT 00152 }; 00153 }; 00154 00161 struct PxVehicleDrive4WControl 00162 { 00163 enum Enum 00164 { 00165 eANALOG_INPUT_ACCEL=0, 00166 eANALOG_INPUT_BRAKE, 00167 eANALOG_INPUT_HANDBRAKE, 00168 eANALOG_INPUT_STEER_LEFT, 00169 eANALOG_INPUT_STEER_RIGHT, 00170 eMAX_NB_DRIVE4W_ANALOG_INPUTS 00171 }; 00172 }; 00173 00177 class PxVehicleDrive4W : public PxVehicleDrive 00178 { 00179 //= ATTENTION! ===================================================================================== 00180 // Changing the data layout of this class breaks the binary serialization format. See comments for 00181 // PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData 00182 // function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION 00183 // accordingly. 00184 //================================================================================================== 00185 public: 00186 friend class PxVehicleUpdate; 00187 00197 static PxVehicleDrive4W* allocate(const PxU32 nbWheels); 00198 00203 void free(); 00204 00216 void setup 00217 (PxPhysics* physics, PxRigidDynamic* vehActor, 00218 const PxVehicleWheelsSimData& wheelsData, const PxVehicleDriveSimData4W& driveData, 00219 const PxU32 nbNonDrivenWheels); 00220 00233 static PxVehicleDrive4W* create 00234 (PxPhysics* physics, PxRigidDynamic* vehActor, 00235 const PxVehicleWheelsSimData& wheelsData, const PxVehicleDriveSimData4W& driveData, 00236 const PxU32 nbNonDrivenWheels); 00237 00245 void setToRestState(); 00246 00251 PxVehicleDriveSimData4W mDriveSimData; 00252 00253 private: 00254 00258 bool isValid() const; 00259 00260 //serialization 00261 protected: 00262 PxVehicleDrive4W(); 00263 ~PxVehicleDrive4W(){} 00264 virtual bool isKindOf(const char* name) const { return !::strcmp("PxVehicleDrive4W", name) || PxBase::isKindOf(name); } 00265 public: 00266 static PxVehicleDrive4W* createObject(PxU8*& address, PxDeserializationContext& context); 00267 static void getBinaryMetaData(PxOutputStream& stream); 00268 PxVehicleDrive4W(PxBaseFlags baseFlags) : PxVehicleDrive(baseFlags), mDriveSimData(PxEmpty) {} 00269 virtual const char* getConcreteTypeName() const { return "PxVehicleDrive4W"; } 00270 //~serialization 00271 }; 00272 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDrive4W) & 15)); 00273 00274 #if !PX_DOXYGEN 00275 } // namespace physx 00276 #endif 00277 00279 #endif //PX_VEHICLE_4WDRIVE_H
Copyright © 2008-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com