UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TransmissionSystem.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
8#include "VehicleUtility.h"
9
10#if VEHICLE_DEBUGGING_ENABLED
12#endif
13
22namespace Chaos
23{
29
37
49
50 class CHAOSVEHICLESCORE_API FSimpleDifferentialSim : public TVehicleSystem<FSimpleDifferentialConfig>
51 {
52 public:
55 , FrontRearSplit(Setup().FrontRearSplit) {}
56
58 };
59
61 {
63 : FinalDriveRatio(1.f)
64 , ChangeUpRPM(5000)
65 , ChangeDownRPM(2500)
66 , GearChangeTime(0.2f)
67 , TransmissionEfficiency(1.f)
68 , TransmissionType(ETransmissionType::Automatic)
69 , AutoReverse(true)
70 {
71 }
72
73 TArray<float> ForwardRatios; // Gear ratios for forward gears
74 TArray<float> ReverseRatios; // Gear ratios for reverse Gear(s)
75 float FinalDriveRatio; // Final drive ratio [~4.0]
76
77 uint32 ChangeUpRPM; // [#todo: RPM or % max RPM?]
78 uint32 ChangeDownRPM; // [#todo: RPM or % max RPM?]
79 float GearChangeTime; // [sec]
80
81 float TransmissionEfficiency; // Loss from friction in the system mean we might run at around 0.94 Efficiency
82
83 ETransmissionType TransmissionType; // Specify Automatic or Manual transmission
84
85 bool AutoReverse; // Arcade handling - holding Brake switches into reverse after vehicle has stopped
86 };
87
88
89 class CHAOSVEHICLESCORE_API FSimpleTransmissionSim : public TVehicleSystem<FSimpleTransmissionConfig>
90 {
91 public:
93
95 // Input functions
96
100 void SetGear(int32 InGear, bool Immediate = false);
101
103 void ChangeUp()
104 {
105 SetGear(TargetGear + 1);
106 }
107
110 {
111 SetGear(TargetGear - 1);
112 }
113
115 void SetEngineRPM(float InRPM)
116 {
117 EngineRPM = InRPM;
118 }
119
121 {
122 AllowedToChangeGear = OkToChangeIn;
123 }
124
126 // Output functions
127
130 {
131 return CurrentGear;
132 }
133
136 {
137 return TargetGear;
138 }
139
142 {
143 return CurrentGearChangeTime;
144 }
145
148 {
149 CurrentGear = InCurrentGear;
150 }
151
154 {
155 TargetGear = InTargetGear;
156 }
157
160 {
161 CurrentGearChangeTime = InCurrentGearChangeTime;
162 }
163
166 {
167 return CurrentGear != TargetGear;
168 }
169
170 bool IsOutOfGear() const
171 {
172 return (CurrentGear == 0) || IsCurrentlyChangingGear();
173 }
174
176 float GetGearRatio(int32 InGear);
177
180 {
181 if (InGear == 0) // neutral, don't want to divide by zero
182 {
183 return 0.0f;
184 }
185
186 return InEngineRPM / GetGearRatio(InGear);
187 }
188
191 {
192 return GetTransmissionRPM(EngineRPM, CurrentGear);
193 }
194
197 {
198 return InEngineTorque * GetGearRatio(GetCurrentGear()) * Setup().TransmissionEfficiency;
199 }
200
202 //float GetEngineTorque(float InTransmissionTorque)
203 //{
204 // return InTransmissionTorque / GetGearRatio(GetCurrentGear()); // #todo: what about transmission frictional losses
205 //}
206
209 {
210 return InWheelRPM * GetGearRatio(GetCurrentGear());
211 }
212
213 /*
214 * Simulate - update internal state
215 * - changes gear when using automatic transmission
216 * - implements gear change time, where gear goes through neutral
217 */
218 void Simulate(float DeltaTime);
219
221 {
222 GearIndexInOut = FMath::Clamp(GearIndexInOut, -Setup().ReverseRatios.Num(), Setup().ForwardRatios.Num());
223 }
224
225 private:
226
227 int32 CurrentGear; // <0 reverse gear(s), 0 neutral, >0 forward gears
228 int32 TargetGear; // <0 reverse gear(s), 0 neutral, >0 forward gears
229 float CurrentGearChangeTime; // Time to change gear, no power transmitted to the wheels during change
230
231 float EngineRPM; // Engine Revs Per Minute
232
233 bool AllowedToChangeGear;
235 };
236
237} // namespace Chaos
238
239#if VEHICLE_DEBUGGING_ENABLED
241#endif
242
#define UE_DISABLE_OPTIMIZATION_SHIP
Definition CoreMiscDefines.h:45
#define UE_ENABLE_OPTIMIZATION_SHIP
Definition CoreMiscDefines.h:51
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition TransmissionSystem.h:51
FSimpleDifferentialSim(const FSimpleDifferentialConfig *SetupIn)
Definition TransmissionSystem.h:53
float FrontRearSplit
Definition TransmissionSystem.h:57
Definition TransmissionSystem.h:90
int32 GetTargetGear() const
Definition TransmissionSystem.h:135
void SetAllowedToChangeGear(bool OkToChangeIn)
Definition TransmissionSystem.h:120
float GetEngineRPMFromWheelRPM(float InWheelRPM)
‍** Given the transmission torque return the engine torque after taking into account the gear ratios ...
Definition TransmissionSystem.h:208
float GetTransmissionTorque(float InEngineTorque)
Definition TransmissionSystem.h:196
float GetTransmissionRPM(float InEngineRPM, int InGear)
Definition TransmissionSystem.h:179
bool IsOutOfGear() const
Definition TransmissionSystem.h:170
bool IsCurrentlyChangingGear() const
Definition TransmissionSystem.h:165
void ChangeUp()
Definition TransmissionSystem.h:103
int32 GetCurrentGear() const
Definition TransmissionSystem.h:129
void SetEngineRPM(float InRPM)
Definition TransmissionSystem.h:115
float GetTransmissionRPM()
Definition TransmissionSystem.h:190
void SetTargetGear(const int32 InTargetGear)
Definition TransmissionSystem.h:153
void SetCurrentGearChangeTime(const float InCurrentGearChangeTime)
Definition TransmissionSystem.h:159
float GetCurrentGearChangeTime() const
Definition TransmissionSystem.h:141
void SetCurrentGear(const int32 InCurrentGear)
Definition TransmissionSystem.h:147
void CorrectGearInputRange(int32 &GearIndexInOut)
Definition TransmissionSystem.h:220
void ChangeDown()
Definition TransmissionSystem.h:109
Definition Array.h:670
Definition VehicleSystemTemplate.h:13
Definition SkeletalMeshComponent.h:307
ETransmissionType
Definition TransmissionSystem.h:25
@ Automatic
Definition TransmissionSystem.h:27
@ Manual
Definition TransmissionSystem.h:26
EDifferentialType
Definition TransmissionSystem.h:31
@ FrontWheelDrive
Definition TransmissionSystem.h:34
@ RearWheelDrive
Definition TransmissionSystem.h:35
@ UndefinedDrive
Definition TransmissionSystem.h:32
@ AllWheelDrive
Definition TransmissionSystem.h:33
Definition TransmissionSystem.h:39
FSimpleDifferentialConfig()
Definition TransmissionSystem.h:40
float FrontRearSplit
Definition TransmissionSystem.h:47
EDifferentialType DifferentialType
Definition TransmissionSystem.h:46
Definition TransmissionSystem.h:61
float FinalDriveRatio
Definition TransmissionSystem.h:75
uint32 ChangeUpRPM
Definition TransmissionSystem.h:77
bool AutoReverse
Definition TransmissionSystem.h:85
FSimpleTransmissionConfig()
Definition TransmissionSystem.h:62
ETransmissionType TransmissionType
Definition TransmissionSystem.h:83
TArray< float > ForwardRatios
Definition TransmissionSystem.h:73
TArray< float > ReverseRatios
Definition TransmissionSystem.h:74
float GearChangeTime
Definition TransmissionSystem.h:79
uint32 ChangeDownRPM
Definition TransmissionSystem.h:78
float TransmissionEfficiency
Definition TransmissionSystem.h:81
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592