UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TransmissionModule.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6
7#define UE_API CHAOSVEHICLESCORE_API
8
9
10namespace Chaos
11{
12 class FTransmissionSimModule;
13 struct FAllInputs;
14 class FSimModuleTree;
15
17 : public FModuleNetData
18 , public Chaos::TSimulationModuleTypeable<FTransmissionSimModule,FTransmissionSimModuleData>
19 {
20#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
22#else
24#endif
25
26 UE_API virtual void FillSimState(ISimulationModuleBase* SimModule) override;
27
28 UE_API virtual void FillNetState(const ISimulationModuleBase* SimModule) override;
29
30 virtual void Serialize(FArchive& Ar) override
31 {
32 Ar << CurrentGear;
33 Ar << TargetGear;
35 }
36
37 UE_API virtual void Lerp(const float LerpFactor, const FModuleNetData& Min, const FModuleNetData& Max) override;
38
39#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
40 UE_API virtual FString ToString() const override;
41#endif
42
46 };
47
54
56 : public FSimOutputData
57 , public Chaos::TSimulationModuleTypeable<FTransmissionSimModule,FTransmissionOutputData>
58 {
61
62 UE_API virtual void FillOutputState(const ISimulationModuleBase* SimModule) override;
63 UE_API virtual void Lerp(const FSimOutputData& InCurrent, const FSimOutputData& InNext, float Alpha) override;
64
65#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
66 UE_API virtual FString ToString() override;
67#endif
68
71 };
72
74 {
80
82 : FinalDriveRatio(3.f)
83 , ChangeUpRPM(5000)
84 , ChangeDownRPM(2500)
85 , GearChangeTime(0.5f)
86 , GearHysteresisTime(2.0f)
90 {
91 ForwardRatios.Add(2.85f);
92 ForwardRatios.Add(2.02f);
93 ForwardRatios.Add(1.35f);
94 ForwardRatios.Add(1.0f);
95
96 ReverseRatios.Add(2.86f);
97 }
98
99 TArray<float> ForwardRatios; // Gear ratios for forward gears
100 TArray<float> ReverseRatios; // Gear ratios for reverse Gear(s)
101 float FinalDriveRatio; // Final drive ratio [~4.0]
102
105 float GearChangeTime; // [sec]
106 float GearHysteresisTime; // [sec]
107
108 float TransmissionEfficiency; // Loss from friction in the system mean we might run at around 0.94 Efficiency
109
110 ETransType TransmissionType; // Specify Automatic or Manual transmission
111
112 bool AutoReverse; // Arcade handling - holding Brake switches into reverse after vehicle has stopped
113 };
114
115 class FTransmissionSimModule : public FTorqueSimModule, public TSimModuleSettings<FTransmissionSettings>, public TSimulationModuleTypeable<FTransmissionSimModule>
116 {
119
120 public:
123
124 virtual TSharedPtr<FModuleNetData> GenerateNetData(const int32 SimArrayIndex) const override
125 {
127 SimArrayIndex
129 , GetDebugName()
130#endif
131 );
132 }
133
134 virtual FSimOutputData* GenerateOutputData() const override
135 {
137 }
138
139 virtual const FString GetDebugName() const { return TEXT("Transmission"); }
140
141 UE_API virtual bool GetDebugString(FString& StringOut) const override;
142
144
145 UE_API virtual void Simulate(float DeltaTime, const FAllInputs& Inputs, FSimModuleTree& VehicleModuleSystem) override;
146
147 protected:
148
152 UE_API void SetGear(int32 InGear, bool Immediate = false);
153
155 UE_API float GetGearRatio(int32 InGear) const;
156
158 void ChangeUp()
159 {
160 SetGear(TargetGear + 1);
161 }
162
165 {
166 SetGear(TargetGear - 1);
167 }
168
171 {
172 return CurrentGear != TargetGear;
173 }
174
176 {
177 GearIndexInOut = FMath::Clamp(GearIndexInOut, -Setup().ReverseRatios.Num(), Setup().ForwardRatios.Num());
178 }
179
180 int32 GetCurrentGear() { return CurrentGear; }
181 int32 GetTargetGear() { return TargetGear; }
182
183 private:
184 int32 CurrentGear; // <0 reverse gear(s), 0 neutral, >0 forward gears
185 int32 TargetGear; // <0 reverse gear(s), 0 neutral, >0 forward gears
186 float CurrentGearChangeTime; // Time to change gear, no power transmitted to the wheels during change
187 mutable int32 PreviousGear;
188
189 bool AllowedToChangeGear; // conditions are ok for an automatic gear change
190 float GearHysteresisTimer;
191 };
192
194 : public FSimFactoryModule<FTransmissionSimModuleData>
195 , public TSimulationModuleTypeable<FTransmissionSimModule,FTransmissionSimFactory>
196 , public TSimFactoryAutoRegister<FTransmissionSimFactory>
197
198 {
199 public:
200 FTransmissionSimFactory() : FSimFactoryModule(TEXT("TransmissionSimFactory")) {}
201 };
202
203
204} // namespace Chaos
205
206#undef UE_API
#define UE_BUILD_TEST
Definition Build.h:17
#define UE_BUILD_SHIPPING
Definition Build.h:20
#define TEXT(x)
Definition Platform.h:1272
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
#define UE_API
Definition SColorGradingComponentViewer.h:12
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition SimulationModuleBase.h:605
Definition SimModuleTree.h:98
Definition TorqueSimModule.h:52
virtual bool IsBehaviourType(eSimModuleTypeFlags InType) const
Definition TorqueSimModule.h:69
Definition TransmissionModule.h:198
FTransmissionSimFactory()
Definition TransmissionModule.h:200
Definition TransmissionModule.h:116
virtual TSharedPtr< FModuleNetData > GenerateNetData(const int32 SimArrayIndex) const override
Definition TransmissionModule.h:124
virtual UE_API bool GetDebugString(FString &StringOut) const override
Definition TransmissionModule.cpp:166
virtual FSimOutputData * GenerateOutputData() const override
Definition TransmissionModule.h:134
virtual bool IsBehaviourType(eSimModuleTypeFlags InType) const override
Definition TransmissionModule.h:143
UE_API float GetGearRatio(int32 InGear) const
Definition TransmissionModule.cpp:128
DEFINE_CHAOSSIMTYPENAME(FTransmissionSimModule)
UE_API void SetGear(int32 InGear, bool Immediate=false)
Definition TransmissionModule.cpp:146
void ChangeDown()
Definition TransmissionModule.h:164
bool IsCurrentlyChangingGear() const
Definition TransmissionModule.h:170
virtual const FString GetDebugName() const
Definition TransmissionModule.h:139
void CorrectGearInputRange(int32 &GearIndexInOut) const
Definition TransmissionModule.h:175
void ChangeUp()
Definition TransmissionModule.h:158
int32 GetCurrentGear()
Definition TransmissionModule.h:180
int32 GetTargetGear()
Definition TransmissionModule.h:181
virtual UE_API void Simulate(float DeltaTime, const FAllInputs &Inputs, FSimModuleTree &VehicleModuleSystem) override
Definition TransmissionModule.cpp:25
Definition SimulationModuleBase.h:299
Definition SimulationModuleBase.h:598
Definition SimulationModuleBase.h:113
FORCEINLINE const FTransmissionSettings & Setup() const
Definition SimulationModuleBase.h:126
Definition ModuleFactoryRegister.h:42
Definition Archive.h:1208
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition SharedPointer.h:692
Definition SkeletalMeshComponent.h:307
eSimModuleTypeFlags
Definition SimulationModuleBase.h:143
@ Velocity
Definition SimulationModuleBase.h:147
Definition SimulationModuleBase.h:65
Definition TransmissionModule.h:49
FGearChangeEvent(int32 InGear)
Definition TransmissionModule.h:50
int32 ChangedToGear
Definition TransmissionModule.h:52
Definition SimulationModuleBase.h:529
Definition SimulationModuleBase.h:567
Definition TransmissionModule.h:58
virtual FSimOutputData * MakeNewData() override
Definition TransmissionModule.h:59
static FSimOutputData * MakeNew()
Definition TransmissionModule.h:60
virtual UE_API void FillOutputState(const ISimulationModuleBase *SimModule) override
Definition TransmissionModule.cpp:212
TArray< FGearChangeEvent > GearChangeEvents
Definition TransmissionModule.h:70
virtual UE_API FString ToString() override
Definition TransmissionModule.cpp:240
int32 CurrentGear
Definition TransmissionModule.h:69
Definition TransmissionModule.h:74
float GearChangeTime
Definition TransmissionModule.h:105
TArray< float > ReverseRatios
Definition TransmissionModule.h:100
TArray< float > ForwardRatios
Definition TransmissionModule.h:99
float GearHysteresisTime
Definition TransmissionModule.h:106
bool AutoReverse
Definition TransmissionModule.h:112
float FinalDriveRatio
Definition TransmissionModule.h:101
float TransmissionEfficiency
Definition TransmissionModule.h:108
uint32 ChangeUpRPM
Definition TransmissionModule.h:103
ETransType TransmissionType
Definition TransmissionModule.h:110
uint32 ChangeDownRPM
Definition TransmissionModule.h:104
ETransType
Definition TransmissionModule.h:76
@ ManualType
Definition TransmissionModule.h:77
@ AutomaticType
Definition TransmissionModule.h:78
FTransmissionSettings()
Definition TransmissionModule.h:81
Definition TransmissionModule.h:19
float CurrentGearChangeTime
Definition TransmissionModule.h:45
virtual void Serialize(FArchive &Ar) override
Definition TransmissionModule.h:30
virtual UE_API void FillNetState(const ISimulationModuleBase *SimModule) override
Definition TransmissionModule.cpp:184
virtual UE_API void FillSimState(ISimulationModuleBase *SimModule) override
Definition TransmissionModule.cpp:174
FTransmissionSimModuleData(int NodeArrayIndex, const FString &InDebugString)
Definition TransmissionModule.h:21
int32 TargetGear
Definition TransmissionModule.h:44
virtual UE_API FString ToString() const override
Definition TransmissionModule.cpp:205
int32 CurrentGear
Definition TransmissionModule.h:43
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592