RavEngine
Loading...
Searching...
No Matches
PxVehicleTireFriction.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#ifndef PX_VEHICLE_TIREFRICTION_H
30#define PX_VEHICLE_TIREFRICTION_H
31
32#include "foundation/PxSimpleTypes.h"
33#include "common/PxSerialFramework.h"
34
35#if !PX_DOXYGEN
36namespace physx
37{
38#endif
39
40class PxMaterial;
41class PxCollection;
42class PxOutputStream;
43
49{
50 enum
51 {
52 eSURFACE_TYPE_UNKNOWN=0xffffffff
53 };
54 PxU32 mType;
55};
56
62{
63public:
64
65 friend class VehicleSurfaceTypeHashTable;
66
67 enum
68 {
69 eMAX_NB_SURFACE_TYPES=256
70 };
71
84 (const PxU32 maxNbTireTypes, const PxU32 maxNbSurfaceTypes);
85
100 void setup
101 (const PxU32 nbTireTypes, const PxU32 nbSurfaceTypes,
102 const PxMaterial** drivableSurfaceMaterials, const PxVehicleDrivableSurfaceType* drivableSurfaceTypes);
103
107 void release();
108
116 void setTypePairFriction(const PxU32 surfaceType, const PxU32 tireType, const PxReal value);
117
118
128 PxU32 getSurfaceType(const PxMaterial& surfaceMaterial) const;
129
139 PxReal getTypePairFriction(const PxU32 surfaceType, const PxU32 tireType) const;
140
150 PxReal getTypePairFriction(const PxMaterial& surfaceMaterial, const PxU32 tireType) const;
151
157 PX_FORCE_INLINE PxU32 getMaxNbSurfaceTypes() const {return mMaxNbSurfaceTypes;}
158
164 PX_FORCE_INLINE PxU32 getMaxNbTireTypes() const {return mMaxNbTireTypes;}
165
185 static void serializeToBinary(const PxVehicleDrivableSurfaceToTireFrictionPairs& frictionTable, const PxSerialObjectId* materialIds, const PxU32 nbMaterialIds, PxCollection* collection, PxOutputStream& stream);
186
194 static PxVehicleDrivableSurfaceToTireFrictionPairs* deserializeFromBinary(const PxCollection& collection, void* memBlock);
195
196private:
197
204 PxReal* mPairs;
205
216 const PxMaterial** mDrivableSurfaceMaterials;
217
228 PxVehicleDrivableSurfaceType* mDrivableSurfaceTypes;
229
233 PxSerialObjectId* mMaterialSerialIds;
234
242 PxU32 mNbSurfaceTypes;
243
249 PxU32 mMaxNbSurfaceTypes;
250
256 PxU32 mNbTireTypes;
257
263 PxU32 mMaxNbTireTypes;
264
266 ~PxVehicleDrivableSurfaceToTireFrictionPairs(){}
267};
268PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDrivableSurfaceToTireFrictionPairs) & 15));
269
270#if !PX_DOXYGEN
271} // namespace physx
272#endif
273
274#endif
Collection class for serialization.
Definition PxCollection.h:104
Material class to represent a set of surface properties.
Definition PxMaterial.h:149
Output stream class for I/O.
Definition PxIO.h:114
Friction for each combination of driving surface type and tire type.
Definition PxVehicleTireFriction.h:62
PX_FORCE_INLINE PxU32 getMaxNbSurfaceTypes() const
Return the maximum number of surface types.
Definition PxVehicleTireFriction.h:157
PX_FORCE_INLINE PxU32 getMaxNbTireTypes() const
Return the maximum number of tire types.
Definition PxVehicleTireFriction.h:164
Definition PxVehicleTireFriction.cpp:155
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
#define PX_COMPILE_TIME_ASSERT(exp)
Definition PxPreprocessor.h:428
#define PX_DEPRECATED
Definition PxPreprocessor.h:418
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
PxU64 PxSerialObjectId
ID type for PxBase objects in a PxCollection.
Definition PxSerialFramework.h:61
Driving surface type. Each PxMaterial is associated with a corresponding PxVehicleDrivableSurfaceType...
Definition PxVehicleTireFriction.h:49