UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VehicleUtility.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Chaos/Core.h"
6#include "Chaos/Real.h"
7#include "Containers/Array.h"
9#include "CoreMinimal.h"
10#include "HAL/PlatformCrt.h"
11#include "Math/NumericLimits.h"
12#include "Math/UnrealMathSSE.h"
13#include "Math/Vector.h"
14#include "Math/Vector2D.h"
15
16#define UE_API CHAOSVEHICLESCORE_API
17
18// Disable Optimizations in non debug build configurations
19#define VEHICLE_DEBUGGING_ENABLED 0
20
21namespace Chaos
22{
23
25 {
27 {
28 return 997.0f; // kg / m3;
29 }
30
31 FORCEINLINE static float AirDensity()
32 {
33 return 1.225f; // kg / m3;
34 }
35
37 {
38 return 0.6125f; // kg / m3;
39 }
40
42 {
43 return 0.7f; // friction coefficient
44 }
45
47 {
48 return 0.4f; // friction coefficient
49 }
50
51 };
52
54 {
55 public:
56 void Empty()
57 {
58 Graph.Empty();
59 }
60
61 void AddNormalized(float Value)
62 {
63 Graph.Add(Value);
64 }
65
66 float GetValue(float InX, float MaxX = 1.0f, float MaxY = 1.0f) const
67 {
68 float Step = MaxX / (Graph.Num() - 1);
69 int StartIndex = InX / Step;
70 float NormalisedRamp = ((float)InX - (float)StartIndex * Step) / Step;
71
72 float NormYValue = 0.0f;
73 if (StartIndex >= Graph.Num() - 1)
74 {
75 NormYValue = Graph[Graph.Num() - 1];
76 }
77 else
78 {
79 NormYValue = Graph[StartIndex] * (1.f - NormalisedRamp) + Graph[StartIndex + 1] * NormalisedRamp;
80 }
81
82 return NormYValue * MaxY;
83 }
84 private:
85 TArray<float> Graph;
86 };
87
88 class FGraph
89 {
90 public:
92 {
93 Empty();
94 }
95
96 void Empty()
97 {
98 Graph.Empty();
99 BoundsX.X = TNumericLimits<FReal>::Max();
100 BoundsX.Y = -TNumericLimits<FReal>::Max();
101 BoundsY.X = TNumericLimits<FReal>::Max();
102 BoundsY.Y = -TNumericLimits<FReal>::Max();
103 }
104
105 UE_API void Add(const FVec2& Value);
106
107 UE_API float EvaluateY(float InX) const;
108
109 bool IsEmpty() const { return Graph.IsEmpty(); }
110 private:
111 TArray<FVec2> Graph;
112 FVector2D BoundsX;
113 FVector2D BoundsY;
114 };
115
117 {
118 public:
121 {
123 }
124
130
136
142
144 static UE_API float TurnRadiusFromThreePoints(const FVector& PtA, const FVector& PtB, const FVector& PtC);
145
146 static float CalculateSlipAngle(float Y, float X)
147 {
148 float Value = 0.0f;
149
150 float LateralSpeedThreshold = 0.05f;
151 if (FMath::Abs(Y) > LateralSpeedThreshold)
152 {
153 Value = FMath::Abs(FMath::Atan2(Y, X));
154 if (Value > HALF_PI)
155 {
156 Value = PI - Value;
157 }
158 }
159
160 return Value;
161 }
162 };
163
165 {
166 return 100.f;
167 }
168
170 {
171 return 0.01f;
172 }
173
175 FORCEINLINE float RPMToOmega(float RPM)
176 {
177 return RPM * PI / 30.f;
178 }
179
181 FORCEINLINE float OmegaToRPM(float Omega)
182 {
183 return Omega * 30.f / PI;
184 }
185
188 {
189 return KmH * 100000.f / 3600.f;
190 }
191
194 {
195 return CmS * 3600.f / 100000.f;
196 }
197
200 {
201 return CmS * 2236.94185f / 100000.f;
202 }
203
206 {
207 return MPH * 100000.f / 2236.94185f;
208 }
209
212 {
213 return MPH * 1609.34f / 3600.f;
214 }
215
217 FORCEINLINE float MSToMPH(float MS)
218 {
219 return MS * 3600.f / 1609.34f;
220 }
221
223 FORCEINLINE float CmToM(float Cm)
224 {
225 return Cm * 0.01f;
226 }
227
230 {
231 return Cm * 0.01f;
232 }
233
235 FORCEINLINE float MToCm(float M)
236 {
237 return M * 100.0f;
238 }
239
242 {
243 return M * 100.0f;
244 }
245
248 {
249 return Cm * 0.0000062137119224f;
250 }
251
252
255 {
256 return Km * 0.62137f;
257 }
258
261 {
262 return Miles * 1.60934f;
263 }
264
266 FORCEINLINE float M2ToCm2(float M2)
267 {
268 return M2 * 100.f * 100.f;
269 }
270
273 {
274 return Cm2 / (100.f * 100.f);
275 }
276
278 {
279 return InDeg * PI / 180.f;
280 }
281
283 {
284 return InRad * 180.f / PI;
285 }
286
287 FORCEINLINE float Sqr(float Val)
288 {
289 return Val * Val;
290 }
291
293 {
294 return TorqueIn * 10000.0f;
295 }
296
298 {
299 return TorqueIn / 10000.0f;
300 }
301
303 {
304 public:
306
307 UE_API void Reset();
308
309 bool IsComplete() const { return MeasurementComplete; }
310
311 UE_API void Update(float DeltaTime, const FVector& CurrentLocation, float CurrentVelocity);
312
313 UE_API FString ToString() const;
314
315 private:
316 FString Description;
317 bool PreStartConditionsMet;
318 bool StartConditionsMet;
319 bool MeasurementComplete;
320
321 FVector InitialLocation;
322 double InitialTime;
323
324 float InitialVelocityMPH;
325 float FinalTargetVelocityMPH;
326 float FinalTargetDistanceMiles;
327
328 float VelocityResultMPH;
329 float DistanceResultMiles;
330 float TimeResultSeconds;
331 };
332
334 {
335 public:
336 enum class EMeasure : uint8
337 {
338 ZeroToThirtyMPH = 0,
343 };
344
346
348 {
349 PerformanceMeasure.Add(MeasureIn);
350 }
351
353 {
354 return PerformanceMeasure[MeasurementIdx];
355 }
356
357 void ResetAll()
358 {
359 for (int I = 0; I < PerformanceMeasure.Num(); I++)
360 {
361 PerformanceMeasure[I].Reset();
362 }
363 }
364
365 void Update(float DeltaTime, const FVector& CurrentLocation, float CurrentVelocity)
366 {
367 for (int I = 0; I < PerformanceMeasure.Num(); I++)
368 {
369 PerformanceMeasure[I].Update(DeltaTime, CurrentLocation, CurrentVelocity);
370 }
371 }
372
373 int GetNumMeasures() const
374 {
375 return PerformanceMeasure.Num();
376 }
377
378 void Enable()
379 {
380 IsEnabledThisFrame = true;
381 }
382
383 bool IsEnabled() const
384 {
385 return IsEnabledThisFrame;
386 }
387
388 private:
389
390 bool IsEnabledThisFrame;
391 TArray<FTimeAndDistanceMeasure> PerformanceMeasure;
392 };
393
394} // namespace Chaos
395
396#undef UE_API
#define FORCEINLINE
Definition AndroidPlatform.h:140
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_API
Definition SColorGradingComponentViewer.h:12
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
#define PI
Definition UnrealMathUtility.h:65
#define HALF_PI
Definition UnrealMathUtility.h:80
float Val(const FString &Value)
Definition UnrealMath.cpp:3163
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition VehicleUtility.h:89
UE_API float EvaluateY(float InX) const
Definition VehicleUtility.cpp:191
bool IsEmpty() const
Definition VehicleUtility.h:109
FGraph()
Definition VehicleUtility.h:91
void Empty()
Definition VehicleUtility.h:96
Definition VehicleUtility.h:54
float GetValue(float InX, float MaxX=1.0f, float MaxY=1.0f) const
Definition VehicleUtility.h:66
void AddNormalized(float Value)
Definition VehicleUtility.h:61
void Empty()
Definition VehicleUtility.h:56
Definition VehicleUtility.h:334
int GetNumMeasures() const
Definition VehicleUtility.h:373
UE_API FPerformanceMeasure()
Definition VehicleUtility.cpp:126
void Update(float DeltaTime, const FVector &CurrentLocation, float CurrentVelocity)
Definition VehicleUtility.h:365
void ResetAll()
Definition VehicleUtility.h:357
void Enable()
Definition VehicleUtility.h:378
const FTimeAndDistanceMeasure & GetMeasure(int MeasurementIdx)
Definition VehicleUtility.h:352
bool IsEnabled() const
Definition VehicleUtility.h:383
EMeasure
Definition VehicleUtility.h:337
void AddMeasure(FTimeAndDistanceMeasure &MeasureIn)
Definition VehicleUtility.h:347
Definition VehicleUtility.h:303
bool IsComplete() const
Definition VehicleUtility.h:309
UE_API void Reset()
Definition VehicleUtility.cpp:21
UE_API FString ToString() const
Definition VehicleUtility.cpp:120
Definition VehicleUtility.h:117
static FORCEINLINE void ClampNormalRange(float &InOutValue)
Definition VehicleUtility.h:120
static float PitchFromForwardVectorRadians(const FVector &NormalizedForwardsVector)
Definition VehicleUtility.h:132
static float RollFromRightVectorRadians(const FVector &NormalizedRightVector)
Definition VehicleUtility.h:138
static float YawFromForwardVectorRadians(const FVector &NormalizedForwardsVector)
Definition VehicleUtility.h:126
static UE_API float TurnRadiusFromThreePoints(const FVector &PtA, const FVector &PtB, const FVector &PtC)
Definition VehicleUtility.cpp:144
static float CalculateSlipAngle(float Y, float X)
Definition VehicleUtility.h:146
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition SkeletalMeshComponent.h:307
FORCEINLINE float KmToMile(float Km)
Definition VehicleUtility.h:254
FORCEINLINE float CmToMiles(float Cm)
Definition VehicleUtility.h:247
FORCEINLINE float TorqueMToCm(float TorqueIn)
Definition VehicleUtility.h:292
FORCEINLINE float KmHToCmS(float KmH)
Definition VehicleUtility.h:187
FORCEINLINE float MPHToCmS(float MPH)
Definition VehicleUtility.h:205
FORCEINLINE float RadToDeg(float InRad)
Definition VehicleUtility.h:282
FORCEINLINE float MSToMPH(float MS)
Definition VehicleUtility.h:217
@ Y
Definition SimulationModuleBase.h:153
@ X
Definition SimulationModuleBase.h:152
FORCEINLINE float MToCm(float M)
Definition VehicleUtility.h:235
FORCEINLINE float RPMToOmega(float RPM)
Definition VehicleUtility.h:175
FORCEINLINE float CmToM(float Cm)
Definition VehicleUtility.h:223
FORCEINLINE float Cm2ToM2(float Cm2)
Definition VehicleUtility.h:272
FORCEINLINE float CmToMScaling()
Definition VehicleUtility.h:169
FORCEINLINE float MToCmScaling()
Definition VehicleUtility.h:164
@ Add
Definition PendingSpatialData.h:18
@ Update
Definition PendingSpatialData.h:19
FORCEINLINE float CmSToKmH(float CmS)
Definition VehicleUtility.h:193
FORCEINLINE float Sqr(float Val)
Definition VehicleUtility.h:287
FORCEINLINE float MileToKm(float Miles)
Definition VehicleUtility.h:260
FORCEINLINE float TorqueCmToM(float TorqueIn)
Definition VehicleUtility.h:297
FORCEINLINE float M2ToCm2(float M2)
Definition VehicleUtility.h:266
FORCEINLINE float OmegaToRPM(float Omega)
Definition VehicleUtility.h:181
FORCEINLINE float DegToRad(float InDeg)
Definition VehicleUtility.h:277
FORCEINLINE float MPHToMS(float MPH)
Definition VehicleUtility.h:211
FORCEINLINE float CmSToMPH(float CmS)
Definition VehicleUtility.h:199
Definition VehicleUtility.h:25
static FORCEINLINE float AirDensity()
Definition VehicleUtility.h:31
static FORCEINLINE float HalfAirDensity()
Definition VehicleUtility.h:36
static FORCEINLINE float DryRoadFriction()
Definition VehicleUtility.h:41
static FORCEINLINE float WetRoadFriction()
Definition VehicleUtility.h:46
static FORCEINLINE float WaterDensity()
Definition VehicleUtility.h:26
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition NumericLimits.h:41
T Y
Definition Vector2D.h:52
T X
Definition Vector2D.h:49