RavEngine
Loading...
Searching...
No Matches
PxVehiclePhysXRoadGeometryComponents.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#pragma once
34#include "vehicle2/PxVehicleParams.h"
35#include "vehicle2/PxVehicleComponent.h"
36
37#include "vehicle2/commands/PxVehicleCommandHelpers.h"
38#include "vehicle2/roadGeometry/PxVehicleRoadGeometryState.h"
39#include "vehicle2/suspension/PxVehicleSuspensionParams.h"
40#include "vehicle2/wheel/PxVehicleWheelParams.h"
41
42#include "vehicle2/physxRoadGeometry/PxVehiclePhysXRoadGeometryFunctions.h"
43#include "vehicle2/physxRoadGeometry/PxVehiclePhysXRoadGeometryParams.h"
44#include "vehicle2/physxRoadGeometry/PxVehiclePhysXRoadGeometryState.h"
45
46#include "common/PxProfileZone.h"
47
48#if !PX_DOXYGEN
49namespace physx
50{
51namespace vehicle2
52{
53#endif
54
56{
57public:
60
76 const PxVehicleAxleDescription*& axleDescription,
77 const PxVehiclePhysXRoadGeometryQueryParams*& roadGeomParams,
78 PxVehicleArrayData<const PxReal>& steerResponseStates,
79 const PxVehicleRigidBodyState*& rigidBodyState,
85
86 virtual bool update(const PxReal dt, const PxVehicleSimulationContext& context)
87 {
88 PX_UNUSED(dt);
89
90 PX_PROFILE_ZONE("PxVehiclePhysXRoadGeometrySceneQueryComponent::update", 0);
91
92 const PxVehicleAxleDescription* axleDescription;
93 const PxVehiclePhysXRoadGeometryQueryParams* roadGeomParams;
94 PxVehicleArrayData<const PxReal> steerResponseStates;
95 const PxVehicleRigidBodyState* rigidBodyState;
101
103 roadGeomParams, steerResponseStates, rigidBodyState,
104 wheelParams, suspensionParams, materialFrictionParams,
105 roadGeometryStates, physxRoadGeometryStates);
106
108 {
109 const PxVehiclePhysXSimulationContext& physxContext = static_cast<const PxVehiclePhysXSimulationContext&>(context);
110
111 for(PxU32 i = 0; i < axleDescription->nbWheels; i++)
112 {
113 const PxU32 wheelId = axleDescription->wheelIdsInAxleOrder[i];
114
115 PxVehiclePhysXRoadGeometryQueryUpdate(
116 wheelParams[wheelId], suspensionParams[wheelId],
117 *roadGeomParams, materialFrictionParams[wheelId],
118 steerResponseStates[wheelId], *rigidBodyState,
119 *physxContext.physxScene, physxContext.physxUnitCylinderSweepMesh, context.frame,
120 roadGeometryStates[wheelId],
121 !physxRoadGeometryStates.isEmpty() ? &physxRoadGeometryStates[wheelId] : NULL);
122 }
123 }
124 else
125 {
126 PX_ALWAYS_ASSERT();
127
128 for(PxU32 i = 0; i < axleDescription->nbWheels; i++)
129 {
130 const PxU32 wheelId = axleDescription->wheelIdsInAxleOrder[i];
131
132 roadGeometryStates[wheelId].setToDefault();
133 }
134 }
135
136 return true;
137 }
138};
139
140#if !PX_DOXYGEN
141} // namespace vehicle2
142} // namespace physx
143#endif
144
Definition base.h:1940
Definition PxVehicleComponent.h:45
Definition PxVehiclePhysXRoadGeometryComponents.h:56
virtual void getDataForPhysXRoadGeometrySceneQueryComponent(const PxVehicleAxleDescription *&axleDescription, const PxVehiclePhysXRoadGeometryQueryParams *&roadGeomParams, PxVehicleArrayData< const PxReal > &steerResponseStates, const PxVehicleRigidBodyState *&rigidBodyState, PxVehicleArrayData< const PxVehicleWheelParams > &wheelParams, PxVehicleArrayData< const PxVehicleSuspensionParams > &suspensionParams, PxVehicleArrayData< const PxVehiclePhysXMaterialFrictionParams > &materialFrictionParams, PxVehicleArrayData< PxVehicleRoadGeometryState > &roadGeometryStates, PxVehicleArrayData< PxVehiclePhysXRoadGeometryQueryState > &physxRoadGeometryStates)=0
Provide vehicle data items for this component.
virtual bool update(const PxReal dt, const PxVehicleSimulationContext &context)
Update function for a vehicle component.
Definition PxVehiclePhysXRoadGeometryComponents.h:86
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Helper struct to pass array type data to vehice components and functions.
Definition PxVehicleParams.h:249
PX_FORCE_INLINE bool isEmpty() const
Check if declared as empty.
Definition PxVehicleParams.h:343
Definition PxVehicleParams.h:53
PxU32 wheelIdsInAxleOrder[PxVehicleLimits::eMAX_NB_WHEELS]
The list of all wheel ids on the vehicle.
Definition PxVehicleParams.h:149
PxU32 nbWheels
The number of wheels on the vehicle.
Definition PxVehicleParams.h:150
A description of type of PhysX scene query and the filter data to apply to the query.
Definition PxVehiclePhysXRoadGeometryParams.h:70
Definition PxVehicleParams.h:742
Definition PxVehicleRigidBodyStates.h:47
@ ePHYSX
The simulation context inherits from PxVehiclePhysXSimulationContext.
Definition PxVehicleParams.h:633
Definition PxVehicleParams.h:672