RavEngine
Loading...
Searching...
No Matches
EngineDrivetrain.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
30
31#include "vehicle2/PxVehicleAPI.h"
32#include "../physxintegration/PhysXIntegration.h"
33
34namespace snippetvehicle2
35{
36
37using namespace physx;
38using namespace physx::vehicle2;
39
41{
42 PxVehicleAutoboxParams autoboxParams;
43 PxVehicleClutchCommandResponseParams clutchCommandResponseParams;
44 PxVehicleEngineParams engineParams;
45 PxVehicleGearboxParams gearBoxParams;
46 PxVehicleMultiWheelDriveDifferentialParams multiWheelDifferentialParams;
47 PxVehicleFourWheelDriveDifferentialParams fourWheelDifferentialParams;
48 PxVehicleTankDriveDifferentialParams tankDifferentialParams;
49 PxVehicleClutchParams clutchParams;
50
51 EngineDrivetrainParams transformAndScale(
52 const PxVehicleFrame& srcFrame, const PxVehicleFrame& trgFrame, const PxVehicleScale& srcScale, const PxVehicleScale& trgScale) const;
53
54 PX_FORCE_INLINE bool isValid(const PxVehicleAxleDescription& axleDesc) const
55 {
56 if (!autoboxParams.isValid(gearBoxParams))
57 return false;
58 if (!clutchCommandResponseParams.isValid())
59 return false;
60 if (!engineParams.isValid())
61 return false;
62 if (!gearBoxParams.isValid())
63 return false;
64 if (!multiWheelDifferentialParams.isValid(axleDesc))
65 return false;
66 if (!fourWheelDifferentialParams.isValid(axleDesc))
67 return false;
68 if (!tankDifferentialParams.isValid(axleDesc))
69 return false;
70 if (!clutchParams.isValid())
71 return false;
72 return true;
73 }
74};
75
77{
78 PxVehicleEngineDriveThrottleCommandResponseState throttleCommandResponseState;
79 PxVehicleAutoboxState autoboxState;
80 PxVehicleClutchCommandResponseState clutchCommandResponseState;
81 PxVehicleDifferentialState differentialState;
82 PxVehicleWheelConstraintGroupState wheelConstraintGroupState;
83 PxVehicleEngineState engineState;
84 PxVehicleGearboxState gearboxState;
85 PxVehicleClutchSlipState clutchState;
86
87 PX_FORCE_INLINE void setToDefault()
88 {
89 throttleCommandResponseState.setToDefault();
90 autoboxState.setToDefault();
91 clutchCommandResponseState.setToDefault();
92 differentialState.setToDefault();
93 wheelConstraintGroupState.setToDefault();
94 engineState.setToDefault();
95 gearboxState.setToDefault();
96 clutchState.setToDefault();
97 }
98};
99
100
101//
102//This class holds the parameters, state and logic needed to implement a vehicle that
103//is using an engine drivetrain with gears, clutch etc.
104//
105//See BaseVehicle for more details on the snippet code design.
106//
108 : public PhysXActorVehicle
115{
116public:
117
118 enum Enum
119 {
120 eDIFFTYPE_FOURWHEELDRIVE,
121 eDIFFTYPE_MULTIWHEELDRIVE,
122 eDIFFTYPE_TANKDRIVE
123 };
124
125 bool initialize(PxPhysics& physics, const PxCookingParams& params, PxMaterial& defaultMaterial,
126 Enum differentialType, bool addPhysXBeginEndComponents=true);
127 virtual void destroy();
128
129 virtual void initComponentSequence(bool addPhysXBeginEndComponents);
130
132 const PxVehicleAxleDescription*& axleDescription,
133 const PxVehicleCommandState*& commands,
134 const PxVehicleEngineDriveTransmissionCommandState*& transmissionCommands,
135 const PxVehicleGearboxParams*& gearParams,
136 const PxVehicleGearboxState*& gearState,
137 const PxVehicleEngineParams*& engineParams,
138 PxVehiclePhysXActor*& physxActor,
139 PxVehiclePhysXSteerState*& physxSteerState,
140 PxVehiclePhysXConstraints*& physxConstraints,
141 PxVehicleRigidBodyState*& rigidBodyState,
143 PxVehicleEngineState*& engineState)
144 {
145 axleDescription = &mBaseParams.axleDescription;
146 commands = &mCommandState;
147 physxActor = &mPhysXState.physxActor;
148 physxSteerState = &mPhysXState.physxSteerState;
149 physxConstraints = &mPhysXState.physxConstraints;
150 rigidBodyState = &mBaseState.rigidBodyState;
151 wheelRigidBody1dStates.setData(mBaseState.wheelRigidBody1dStates);
152
153 transmissionCommands = &mTransmissionCommandState;
154 gearParams = &mEngineDriveParams.gearBoxParams;
155 gearState = &mEngineDriveState.gearboxState;
156 engineParams = &mEngineDriveParams.engineParams;
157 engineState = &mEngineDriveState.engineState;
158 }
159
161 const PxVehicleAxleDescription*& axleDescription,
162 const PxVehicleRigidBodyState*& rigidBodyState,
164 PxVehicleArrayData<const PxTransform>& wheelShapeLocalPoses,
167 const PxVehicleGearboxState*& gearState,
168 PxVehiclePhysXActor*& physxActor)
169 {
170 axleDescription = &mBaseParams.axleDescription;
171 rigidBodyState = &mBaseState.rigidBodyState;
172 wheelParams.setData(mBaseParams.wheelParams);
173 wheelShapeLocalPoses.setData(mPhysXParams.physxWheelShapeLocalPoses);
174 wheelRigidBody1dStates.setData(mBaseState.wheelRigidBody1dStates);
175 wheelLocalPoses.setData(mBaseState.wheelLocalPoses);
176 physxActor = &mPhysXState.physxActor;
177
178 gearState = &mEngineDriveState.gearboxState;
179 }
180
182 const PxVehicleAxleDescription*& axleDescription,
184 const PxVehicleSteerCommandResponseParams*& steerResponseParams,
186 const PxVehicleGearboxParams*& gearboxParams,
187 const PxVehicleClutchCommandResponseParams*& clutchResponseParams,
188 const PxVehicleEngineParams*& engineParams,
189 const PxVehicleRigidBodyState*& rigidBodyState,
190 const PxVehicleEngineState*& engineState,
191 const PxVehicleAutoboxParams*& autoboxParams,
192 const PxVehicleCommandState*& commands,
193 const PxVehicleEngineDriveTransmissionCommandState*& transmissionCommands,
194 PxVehicleArrayData<PxReal>& brakeResponseStates,
196 PxVehicleArrayData<PxReal>& steerResponseStates,
197 PxVehicleGearboxState*& gearboxResponseState,
198 PxVehicleClutchCommandResponseState*& clutchResponseState,
199 PxVehicleAutoboxState*& autoboxState)
200 {
201 axleDescription = &mBaseParams.axleDescription;
202 brakeResponseParams.setDataAndCount(mBaseParams.brakeResponseParams, sizeof(mBaseParams.brakeResponseParams) / sizeof(PxVehicleBrakeCommandResponseParams));
203 steerResponseParams = &mBaseParams.steerResponseParams;
204 ackermannParams.setDataAndCount(mBaseParams.ackermannParams, sizeof(mBaseParams.ackermannParams)/sizeof(PxVehicleAckermannParams));
205 gearboxParams = &mEngineDriveParams.gearBoxParams;
206 clutchResponseParams = &mEngineDriveParams.clutchCommandResponseParams;
207 engineParams = &mEngineDriveParams.engineParams;
208 rigidBodyState = &mBaseState.rigidBodyState;
209 engineState = &mEngineDriveState.engineState;
210 autoboxParams = &mEngineDriveParams.autoboxParams;
211 commands = &mCommandState;
212 transmissionCommands = (Enum::eDIFFTYPE_TANKDRIVE == mDifferentialType) ? &mTankDriveTransmissionCommandState : &mTransmissionCommandState;
213 brakeResponseStates.setData(mBaseState.brakeCommandResponseStates);
214 throttleResponseState = &mEngineDriveState.throttleCommandResponseState;
215 steerResponseStates.setData(mBaseState.steerCommandResponseStates);
216 gearboxResponseState = &mEngineDriveState.gearboxState;
217 clutchResponseState = &mEngineDriveState.clutchCommandResponseState;
218 autoboxState = &mEngineDriveState.autoboxState;
219 }
220
221 virtual void getDataForFourWheelDriveDifferentialStateComponent(
222 const PxVehicleAxleDescription*& axleDescription,
223 const PxVehicleFourWheelDriveDifferentialParams*& differentialParams,
225 PxVehicleDifferentialState*& differentialState, PxVehicleWheelConstraintGroupState*& wheelConstraintGroups)
226 {
227 axleDescription = &mBaseParams.axleDescription;
228 differentialParams = &mEngineDriveParams.fourWheelDifferentialParams;
229 wheelRigidbody1dStates.setData(mBaseState.wheelRigidBody1dStates);
230 differentialState = &mEngineDriveState.differentialState;
231 wheelConstraintGroups = &mEngineDriveState.wheelConstraintGroupState;
232 }
233
234 virtual void getDataForMultiWheelDriveDifferentialStateComponent(
235 const PxVehicleAxleDescription*& axleDescription,
236 const PxVehicleMultiWheelDriveDifferentialParams*& differentialParams,
237 PxVehicleDifferentialState*& differentialState)
238 {
239 axleDescription = &mBaseParams.axleDescription;
240 differentialParams = &mEngineDriveParams.multiWheelDifferentialParams;
241 differentialState = &mEngineDriveState.differentialState;
242 }
243
245 const PxVehicleAxleDescription *&axleDescription,
246 const PxVehicleTankDriveTransmissionCommandState*& tankDriveTransmissionCommands,
248 const PxVehicleTankDriveDifferentialParams *& differentialParams,
249 PxVehicleDifferentialState *& differentialState,
250 PxVehicleWheelConstraintGroupState*& wheelConstraintGroups)
251 {
252 axleDescription = &mBaseParams.axleDescription;
253 tankDriveTransmissionCommands = &mTankDriveTransmissionCommandState;
254 wheelParams.setData(mBaseParams.wheelParams);
255 differentialParams = &mEngineDriveParams.tankDifferentialParams;
256 differentialState = &mEngineDriveState.differentialState;
257 wheelConstraintGroups = &mEngineDriveState.wheelConstraintGroupState;
258 }
259
260 virtual void getDataForEngineDriveActuationStateComponent(
261 const PxVehicleAxleDescription*& axleDescription,
262 const PxVehicleGearboxParams*& gearboxParams,
263 PxVehicleArrayData<const PxReal>& brakeResponseStates,
264 const PxVehicleEngineDriveThrottleCommandResponseState*& throttleResponseState,
265 const PxVehicleGearboxState*& gearboxState,
266 const PxVehicleDifferentialState*& differentialState,
267 const PxVehicleClutchCommandResponseState*& clutchResponseState,
269 {
270 axleDescription = &mBaseParams.axleDescription;
271 gearboxParams = &mEngineDriveParams.gearBoxParams;
272 brakeResponseStates.setData(mBaseState.brakeCommandResponseStates);
273 throttleResponseState = &mEngineDriveState.throttleCommandResponseState;
274 gearboxState = &mEngineDriveState.gearboxState;
275 differentialState = &mEngineDriveState.differentialState;
276 clutchResponseState = &mEngineDriveState.clutchCommandResponseState;
277 actuationStates.setData(mBaseState.actuationStates);
278 }
279
281 const PxVehicleAxleDescription*& axleDescription,
283 const PxVehicleEngineParams*& engineParams,
284 const PxVehicleClutchParams*& clutchParams,
285 const PxVehicleGearboxParams*& gearboxParams,
286 PxVehicleArrayData<const PxReal>& brakeResponseStates,
289 const PxVehicleEngineDriveThrottleCommandResponseState*& throttleResponseState,
290 const PxVehicleClutchCommandResponseState*& clutchResponseState,
291 const PxVehicleDifferentialState*& differentialState,
292 const PxVehicleWheelConstraintGroupState*& constraintGroupState,
294 PxVehicleEngineState*& engineState,
295 PxVehicleGearboxState*& gearboxState,
296 PxVehicleClutchSlipState*& clutchState)
297 {
298 axleDescription = &mBaseParams.axleDescription;
299 wheelParams.setData(mBaseParams.wheelParams);
300 engineParams = &mEngineDriveParams.engineParams;
301 clutchParams = &mEngineDriveParams.clutchParams;
302 gearboxParams = &mEngineDriveParams.gearBoxParams;
303 brakeResponseStates.setData(mBaseState.brakeCommandResponseStates);
304 actuationStates.setData(mBaseState.actuationStates);
305 tireForces.setData(mBaseState.tireForces);
306 throttleResponseState = &mEngineDriveState.throttleCommandResponseState;
307 clutchResponseState = &mEngineDriveState.clutchCommandResponseState;
308 differentialState = &mEngineDriveState.differentialState;
309 constraintGroupState = Enum::eDIFFTYPE_TANKDRIVE == mDifferentialType ? &mEngineDriveState.wheelConstraintGroupState : NULL;
310 wheelRigidBody1dStates.setData(mBaseState.wheelRigidBody1dStates);
311 engineState = &mEngineDriveState.engineState;
312 gearboxState = &mEngineDriveState.gearboxState;
313 clutchState = &mEngineDriveState.clutchState;
314 }
315
316
317 //Parameters and states of the vehicle's engine drivetrain.
318 EngineDrivetrainParams mEngineDriveParams;
319 EngineDrivetrainState mEngineDriveState;
320
321 //The commands that will control the vehicle's transmission
322 PxVehicleEngineDriveTransmissionCommandState mTransmissionCommandState;
323 PxVehicleTankDriveTransmissionCommandState mTankDriveTransmissionCommandState;
324
325 //The type of differential that will be used.
326 //If eDIFFTYPE_TANKDRIVE is chosen then the vehicle's transmission
327 //commands are stored in mTankDriveTransmissionCommandState.
328 //If eDIFFTYPE_FOURWHEELDRIVE or eDIFFTYPE_MULTIWHEELDRIVE is chosen
329 //then the vehicle's transmission commands are stored in
330 //mTransmissionCommandState
331 Enum mDifferentialType;
332};
333
334}//namespace snippetvehicle2
Material class to represent a set of surface properties.
Definition PxMaterial.h:149
Abstract singleton factory class used for instancing objects in the Physics SDK.
Definition PxPhysics.h:91
Determine the actuation state for each wheel for a vehicle propelled by engine torque.
Definition PxVehicleDrivetrainComponents.h:651
Forward the applicable set of control values for a vehicle driven by an engine to a command response ...
Definition PxVehicleDrivetrainComponents.h:303
Forward integrate the angular speed of each wheel and of the engine, accounting for the state of the ...
Definition PxVehicleDrivetrainComponents.h:707
Compute the per wheel drive torque split of a differential delivering torque to multiple wheels with ...
Definition PxVehicleDrivetrainComponents.h:501
Compute the per wheel drive torque split of a multi-wheel drive differential.
Definition PxVehicleDrivetrainComponents.h:461
Compute the per wheel drive torque split of a tank drive differential.
Definition PxVehicleDrivetrainComponents.h:545
Definition EngineDrivetrain.h:115
virtual void getDataForTankDriveDifferentialStateComponent(const PxVehicleAxleDescription *&axleDescription, const PxVehicleTankDriveTransmissionCommandState *&tankDriveTransmissionCommands, PxVehicleArrayData< const PxVehicleWheelParams > &wheelParams, const PxVehicleTankDriveDifferentialParams *&differentialParams, PxVehicleDifferentialState *&differentialState, PxVehicleWheelConstraintGroupState *&wheelConstraintGroups)
Provide vehicle data items for this component.
Definition EngineDrivetrain.h:244
virtual void getDataForEngineDrivetrainComponent(const PxVehicleAxleDescription *&axleDescription, PxVehicleArrayData< const PxVehicleWheelParams > &wheelParams, const PxVehicleEngineParams *&engineParams, const PxVehicleClutchParams *&clutchParams, const PxVehicleGearboxParams *&gearboxParams, PxVehicleArrayData< const PxReal > &brakeResponseStates, PxVehicleArrayData< const PxVehicleWheelActuationState > &actuationStates, PxVehicleArrayData< const PxVehicleTireForce > &tireForces, const PxVehicleEngineDriveThrottleCommandResponseState *&throttleResponseState, const PxVehicleClutchCommandResponseState *&clutchResponseState, const PxVehicleDifferentialState *&differentialState, const PxVehicleWheelConstraintGroupState *&constraintGroupState, PxVehicleArrayData< PxVehicleWheelRigidBody1dState > &wheelRigidBody1dStates, PxVehicleEngineState *&engineState, PxVehicleGearboxState *&gearboxState, PxVehicleClutchSlipState *&clutchState)
Provide vehicle data items for this component.
Definition EngineDrivetrain.h:280
virtual void getDataForPhysXActorBeginComponent(const PxVehicleAxleDescription *&axleDescription, const PxVehicleCommandState *&commands, const PxVehicleEngineDriveTransmissionCommandState *&transmissionCommands, const PxVehicleGearboxParams *&gearParams, const PxVehicleGearboxState *&gearState, const PxVehicleEngineParams *&engineParams, PxVehiclePhysXActor *&physxActor, PxVehiclePhysXSteerState *&physxSteerState, PxVehiclePhysXConstraints *&physxConstraints, PxVehicleRigidBodyState *&rigidBodyState, PxVehicleArrayData< PxVehicleWheelRigidBody1dState > &wheelRigidBody1dStates, PxVehicleEngineState *&engineState)
Provide vehicle data items for this component.
Definition EngineDrivetrain.h:131
virtual void getDataForEngineDriveCommandResponseComponent(const PxVehicleAxleDescription *&axleDescription, PxVehicleSizedArrayData< const PxVehicleBrakeCommandResponseParams > &brakeResponseParams, const PxVehicleSteerCommandResponseParams *&steerResponseParams, PxVehicleSizedArrayData< const PxVehicleAckermannParams > &ackermannParams, const PxVehicleGearboxParams *&gearboxParams, const PxVehicleClutchCommandResponseParams *&clutchResponseParams, const PxVehicleEngineParams *&engineParams, const PxVehicleRigidBodyState *&rigidBodyState, const PxVehicleEngineState *&engineState, const PxVehicleAutoboxParams *&autoboxParams, const PxVehicleCommandState *&commands, const PxVehicleEngineDriveTransmissionCommandState *&transmissionCommands, PxVehicleArrayData< PxReal > &brakeResponseStates, PxVehicleEngineDriveThrottleCommandResponseState *&throttleResponseState, PxVehicleArrayData< PxReal > &steerResponseStates, PxVehicleGearboxState *&gearboxResponseState, PxVehicleClutchCommandResponseState *&clutchResponseState, PxVehicleAutoboxState *&autoboxState)
Provide vehicle data items for this component.
Definition EngineDrivetrain.h:181
virtual void getDataForPhysXActorEndComponent(const PxVehicleAxleDescription *&axleDescription, const PxVehicleRigidBodyState *&rigidBodyState, PxVehicleArrayData< const PxVehicleWheelParams > &wheelParams, PxVehicleArrayData< const PxTransform > &wheelShapeLocalPoses, PxVehicleArrayData< const PxVehicleWheelRigidBody1dState > &wheelRigidBody1dStates, PxVehicleArrayData< const PxVehicleWheelLocalPose > &wheelLocalPoses, const PxVehicleGearboxState *&gearState, PxVehiclePhysXActor *&physxActor)
Provide vehicle data items for this component.
Definition EngineDrivetrain.h:160
Definition PhysXIntegration.h:116
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Structure describing parameters affecting mesh cooking.
Definition PxCooking.h:185
A description of a single axle that is to be affected by Ackermann steer correction.
Definition PxVehicleSteeringParams.h:86
Helper struct to pass array type data to vehice components and functions.
Definition PxVehicleParams.h:249
PX_FORCE_INLINE void setData(T *data)
Set the data as an array of structs.
Definition PxVehicleParams.h:261
Definition PxVehicleDrivetrainParams.h:404
Definition PxVehicleDrivetrainStates.h:122
Definition PxVehicleParams.h:53
Distribute a brake response to the wheels of a vehicle.
Definition PxVehicleBrakingParams.h:56
Specifies the maximum clutch strength that occurs when the clutch pedal is fully disengaged and the c...
Definition PxVehicleDrivetrainParams.h:84
Definition PxVehicleDrivetrainStates.h:46
The clutch connects two plates together. One plate rotates with the speed of the engine....
Definition PxVehicleDrivetrainParams.h:141
The clutch is modelled as two spinning plates with one connected to the wheels through the gearing an...
Definition PxVehicleDrivetrainStates.h:266
A description of the state of commands that are applied to the vehicle.
Definition PxVehicleCommandStates.h:53
Definition PxVehicleDrivetrainStates.h:143
A description of the state of transmission-related commands that are applied to a vehicle with engine...
Definition PxVehicleCommandStates.h:92
Definition PxVehicleDrivetrainParams.h:192
Definition PxVehicleDrivetrainStates.h:67
PxVehicleFourWheelDriveDifferentialParams specifies the wheels that are to receive drive torque from ...
Definition PxVehicleDrivetrainParams.h:672
Definition PxVehicleParams.h:174
Definition PxVehicleDrivetrainParams.h:320
Definition PxVehicleDrivetrainStates.h:85
PxVehicleMultiWheelDriveDifferentialParams specifies the wheels that are to receive drive torque from...
Definition PxVehicleDrivetrainParams.h:600
A description of the PhysX actor and shapes that represent the vehicle in an associated PxScene.
Definition PxVehiclePhysXActorStates.h:55
A mapping between constraint state data and the associated PxConstraint instances.
Definition PxVehiclePhysXConstraintStates.h:317
A description of the previous steer command applied to the vehicle.
Definition PxVehiclePhysXActorStates.h:80
Definition PxVehicleRigidBodyStates.h:47
Definition PxVehicleParams.h:224
Definition PxVehicleParams.h:369
PX_FORCE_INLINE void setDataAndCount(T *data, const PxU32 count)
Set the data as an array of structs and set the number of data entries.
Definition PxVehicleParams.h:376
Distribute a steer response to the wheels of a vehicle.
Definition PxVehicleSteeringParams.h:58
A description of a tank differential.
Definition PxVehicleDrivetrainParams.h:853
A description of the state of transmission-related commands that are applied to a vehicle with tank d...
Definition PxVehicleCommandStates.h:120
Specify groups of wheels that are to be constrained to have pre-determined angular velocity relations...
Definition PxVehicleDrivetrainStates.h:179
Definition EngineDrivetrain.h:41
Definition EngineDrivetrain.h:77