PxVehicleNoDrive.h

Go to the documentation of this file.
00001 //
00002 // Redistribution and use in source and binary forms, with or without
00003 // modification, are permitted provided that the following conditions
00004 // are met:
00005 //  * Redistributions of source code must retain the above copyright
00006 //    notice, this list of conditions and the following disclaimer.
00007 //  * Redistributions in binary form must reproduce the above copyright
00008 //    notice, this list of conditions and the following disclaimer in the
00009 //    documentation and/or other materials provided with the distribution.
00010 //  * Neither the name of NVIDIA CORPORATION nor the names of its
00011 //    contributors may be used to endorse or promote products derived
00012 //    from this software without specific prior written permission.
00013 //
00014 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
00015 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00016 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00017 // PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
00018 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00019 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00020 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00021 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
00022 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00023 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00024 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00025 //
00026 // Copyright (c) 2008-2018 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_NO_DRIVE_H
00031 #define PX_VEHICLE_NO_DRIVE_H
00032 
00036 #include "vehicle/PxVehicleWheels.h"
00037 #include "vehicle/PxVehicleComponents.h"
00038 
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 
00057 class PxVehicleNoDrive : public PxVehicleWheels
00058 {
00059 //= ATTENTION! =====================================================================================
00060 // Changing the data layout of this class breaks the binary serialization format.  See comments for 
00061 // PX_BINARY_SERIAL_VERSION.  If a modification is required, please adjust the getBinaryMetaData 
00062 // function.  If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
00063 // accordingly.
00064 //==================================================================================================
00065 public:
00066 
00067     friend class PxVehicleUpdate;
00068 
00078     static PxVehicleNoDrive* allocate(const PxU32 nbWheels);
00079 
00084     void free();
00085 
00094     void setup
00095         (PxPhysics* physics, PxRigidDynamic* vehActor, const PxVehicleWheelsSimData& wheelsData);
00096 
00106     static PxVehicleNoDrive* create
00107         (PxPhysics* physics, PxRigidDynamic* vehActor, const PxVehicleWheelsSimData& wheelsData);
00108 
00116     void setToRestState();
00117 
00128     void setBrakeTorque(const PxU32 id, const PxReal brakeTorque);
00129 
00140     void setDriveTorque(const PxU32 id, const PxReal driveTorque);
00141 
00152     void setSteerAngle(const PxU32 id, const PxReal steerAngle);
00153 
00159     PxReal getBrakeTorque(const PxU32 id) const;
00160 
00166     PxReal getDriveTorque(const PxU32 id) const;
00167 
00173     PxReal getSteerAngle(const PxU32 id) const;
00174         
00175 private:
00176 
00177     PxReal* mSteerAngles;
00178     PxReal* mDriveTorques;
00179     PxReal* mBrakeTorques;
00180 
00181 #if PX_P64_FAMILY
00182     PxU32 mPad[2];
00183 #else 
00184     PxU32 mPad[1];
00185 #endif
00186 
00190     bool isValid() const;
00191 
00192 
00193 //serialization
00194 public:
00195                                     PxVehicleNoDrive(PxBaseFlags baseFlags) : PxVehicleWheels(baseFlags) {} 
00196     virtual     void                exportExtraData(PxSerializationContext&);
00197                 void                importExtraData(PxDeserializationContext&);
00198     static      PxVehicleNoDrive*   createObject(PxU8*& address, PxDeserializationContext& context);
00199     static      void                getBinaryMetaData(PxOutputStream& stream);
00200     virtual     const char*         getConcreteTypeName() const         { return "PxVehicleNoDrive";    }
00201     virtual     bool                isKindOf(const char* name)  const   { return !::strcmp("PxVehicleNoDrive", name) || PxBase::isKindOf(name); }
00202                 PxU32               getNbSteerAngle() const { return mWheelsSimData.getNbWheels();  }
00203                 PxU32               getNbDriveTorque() const    { return mWheelsSimData.getNbWheels();  }
00204                 PxU32               getNbBrakeTorque() const    { return mWheelsSimData.getNbWheels();  }
00205 protected:
00206                                     PxVehicleNoDrive();
00207                                     ~PxVehicleNoDrive() {}
00208 //~serialization
00209 };
00210 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleNoDrive) & 15));
00211 
00212 #if !PX_DOXYGEN
00213 } // namespace physx
00214 #endif
00215 
00217 #endif //PX_VEHICLE_NO_DRIVE_H


Copyright © 2008-2018 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com