UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
InputDeviceProperties.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "UObject/Object.h"
9
10#include "InputDeviceProperties.generated.h"
11
13class UCurveFloat;
14
15#if WITH_EDITOR
17#endif // WITH_EDITOR
18
31UCLASS(Abstract, Blueprintable, BlueprintType, EditInlineNew, CollapseCategories, meta = (ShowWorldContextPin), MinimalAPI)
33{
35
37public:
38
40
42
52 UFUNCTION(BlueprintNativeEvent, Category = "InputDevice")
53 ENGINE_API void EvaluateDeviceProperty(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, const float DeltaTime, const float Duration);
54
61 ENGINE_API virtual void EvaluateDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, const float DeltaTime, const float Duration);
62
69 UFUNCTION(BlueprintNativeEvent, Category = "InputDevice")
70 ENGINE_API void ResetDeviceProperty(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, bool bForceReset = false);
71
78 ENGINE_API virtual void ResetDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, bool bForceReset = false);
79
86 UFUNCTION(Category = "InputDevice")
87 ENGINE_API virtual void ApplyDeviceProperty(const FPlatformUserId UserId, const FInputDeviceId DeviceId);
88
90 virtual FInputDeviceProperty* GetInternalDeviceProperty() { return nullptr; };
91
92public:
93
98 ENGINE_API float GetDuration() const;
99
104 ENGINE_API virtual float RecalculateDuration();
105
106 // Post edit change property to update the duration if there are any dynamic options like for curves
107#if WITH_EDITOR
108 ENGINE_API virtual void PostEditChangeChainProperty(FPropertyChangedChainEvent& PropertyChangedEvent) override;
109#endif // WITH_EDITOR
110
111protected:
112
119 static ENGINE_API void ApplyDeviceProperty_Internal(const FPlatformUserId UserId, const FInputDeviceId DeviceId, FInputDeviceProperty* RawProperty);
120
122 template<class TDataLayout>
123 const TDataLayout* GetDeviceSpecificData(const FPlatformUserId UserId, const FInputDeviceId DeviceId, const TMap<FName, TDataLayout>& InMap) const;
124
125 template<class TDataLayout>
130
138 UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Info")
139 float PropertyDuration = 0.0f;
140};
141
143const TDataLayout* UInputDeviceProperty::GetDeviceSpecificData(const FPlatformUserId UserId, const FInputDeviceId DeviceId, const TMap<FName, TDataLayout>& InDeviceData) const
144{
146 {
147 // If we were given a valid device, use that. Otherwise, default to the player's most recently used device
148 const FHardwareDeviceIdentifier Hardware = DeviceId.IsValid() ? SubSystem->GetInputDeviceHardwareIdentifier(DeviceId) : SubSystem->GetMostRecentlyUsedHardwareDevice(UserId);
149
150 // Check if there are any per-input device overrides available
152 {
153 return DeviceDetails;
154 }
155 }
156
157 return nullptr;
158}
159
161// UColorInputDeviceProperty
162
164USTRUCT(BlueprintType)
166{
168
169
170 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Color")
171 bool bEnable = true;
172
174 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Color")
175 bool bResetAfterCompletion = false;
176
178 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Color")
179 FColor LightColor = FColor::White;
180};
181
189UCLASS(Blueprintable, BlueprintType, meta = (DisplayName = "Device Color (Static)"))
191{
193
194public:
195
196 virtual void EvaluateDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, const float DeltaTime, const float Duration) override;
197 virtual void ResetDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, bool bForceReset = false) override;
198 virtual FInputDeviceProperty* GetInternalDeviceProperty() override;
199
201 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Color")
202 FDeviceColorData ColorData;
203
205 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Color", meta = (GetOptions = "Engine.InputPlatformSettings.GetAllHardwareDeviceNames"))
206 TMap<FName, FDeviceColorData> DeviceOverrideData;
207
208private:
209
211 FInputDeviceLightColorProperty InternalProperty;
212};
213
214
216// UColorInputDeviceCurveProperty
217
219USTRUCT(BlueprintType)
221{
223
224
225 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Color")
226 bool bEnable = true;
227
229 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Color")
230 bool bResetAfterCompletion = true;
231
233 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Color")
234 TObjectPtr<UCurveLinearColor> DeviceColorCurve;
235};
236
243UCLASS(Blueprintable, BlueprintType, meta = (DisplayName = "Device Color (Curve)"))
245{
247
248public:
249
250 virtual void EvaluateDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, const float DeltaTime, const float Duration) override;
251 virtual void ResetDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, bool bForceReset = false) override;
252 virtual FInputDeviceProperty* GetInternalDeviceProperty() override;
253 virtual float RecalculateDuration() override;
254
255protected:
257 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Color")
258 FDeviceColorCurveData ColorData;
259
261 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Color", meta = (GetOptions = "Engine.InputPlatformSettings.GetAllHardwareDeviceNames"))
262 TMap<FName, FDeviceColorCurveData> DeviceOverrideData;
263
264private:
265
267 FInputDeviceLightColorProperty InternalProperty;
268};
269
270
272// UInputDeviceTriggerEffect
273
274USTRUCT(BlueprintType)
276{
278
279
280 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Triggers")
282
284 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Triggers")
285 bool bResetUponCompletion = true;
286};
287
289UCLASS(Abstract, meta = (DisplayName = "Base Trigger Effect"), MinimalAPI)
291{
293
294public:
295
296 ENGINE_API virtual FInputDeviceProperty* GetInternalDeviceProperty() override;
297 ENGINE_API virtual void ResetDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, bool bForceReset = false) override;
298 ENGINE_API virtual void ApplyDeviceProperty(const FPlatformUserId UserId, const FInputDeviceId DeviceId) override;
299
300 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Triggers")
301 FDeviceTriggerBaseData BaseTriggerData;
302
304
307};
308
310// UInputDeviceTriggerFeedbackProperty
311
312USTRUCT(BlueprintType)
314{
316
317
318 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty")
319 TObjectPtr<UCurveFloat> FeedbackPositionCurve;
320
322 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty")
323 TObjectPtr<UCurveFloat> FeedbackStrenghCurve;
324};
325
332UCLASS(Blueprintable, meta = (DisplayName = "Trigger Feedback"))
334{
336
337public:
338
340
341 virtual void EvaluateDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, const float DeltaTime, const float Duration) override;
342 virtual FInputDeviceProperty* GetInternalDeviceProperty() override;
343 virtual float RecalculateDuration() override;
344
346 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Trigger")
348
350 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Trigger", meta = (GetOptions = "Engine.InputPlatformSettings.GetAllHardwareDeviceNames"))
352
353private:
354
355 int32 GetPositionValue(const FDeviceTriggerFeedbackData* Data, const float Duration) const;
356 int32 GetStrengthValue(const FDeviceTriggerFeedbackData* Data, const float Duration) const;
357
360};
361
363// UInputDeviceTriggerResistanceProperty
364
365USTRUCT(BlueprintType)
367{
369
370
371 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty", meta = (UIMin = "0", UIMAX = "9"))
372 int32 StartPosition = 0;
373
375 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty", meta = (UIMin = "0", UIMAX = "8"))
376 int32 StartStrengh = 0;
377
378 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty", meta = (UIMin = "0", UIMAX = "9"))
379 int32 EndPosition = 0;
380
381 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty", meta = (UIMin = "0", UIMAX = "8"))
382 int32 EndStrengh = 0;
383};
384
391UCLASS(Blueprintable, meta = (DisplayName = "Trigger Resistance"))
393{
395
396public:
397
399
400 virtual void EvaluateDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, const float DeltaTime, const float Duration) override;
401 virtual FInputDeviceProperty* GetInternalDeviceProperty() override;
402
403protected:
404
405 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Trigger")
407
408
410 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Trigger", meta = (GetOptions = "Engine.InputPlatformSettings.GetAllHardwareDeviceNames"))
412
413private:
414
417};
418
419
421// UInputDeviceTriggerVibrationProperty
422
423
424USTRUCT(BlueprintType)
426{
428
429
430 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty")
431 TObjectPtr<UCurveFloat> TriggerPositionCurve;
432
434 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty")
435 TObjectPtr<UCurveFloat> VibrationFrequencyCurve;
436
438 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty")
439 TObjectPtr<UCurveFloat> VibrationAmplitudeCurve;
440};
441
448UCLASS(Blueprintable, meta = (DisplayName = "Trigger Vibration"))
450{
452
453public:
454
456
457 virtual void EvaluateDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, const float DeltaTime, const float Duration) override;
458 virtual FInputDeviceProperty* GetInternalDeviceProperty() override;
459 virtual float RecalculateDuration() override;
460
461 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Trigger")
463
465 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Trigger", meta = (GetOptions = "Engine.InputPlatformSettings.GetAllHardwareDeviceNames"))
467
468private:
469
470 int32 GetTriggerPositionValue(const FDeviceTriggerTriggerVibrationData* Data, const float Duration) const;
471 int32 GetVibrationFrequencyValue(const FDeviceTriggerTriggerVibrationData* Data, const float Duration) const;
472 int32 GetVibrationAmplitudeValue(const FDeviceTriggerTriggerVibrationData* Data, const float Duration) const;
473
476};
477
479// UInputDeviceSoundBasedVibrationProperty
480
481class USoundBase;
482class UEndpointSubmix;
483
484USTRUCT(BlueprintType)
486{
488
490
492 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DeviceProperty")
494};
495
501UCLASS(Blueprintable, meta = (DisplayName = "Audio Based Vibration (Experimental)"))
503{
505
506public:
507 virtual void EvaluateDeviceProperty_Implementation(const FPlatformUserId PlatformUser, const FInputDeviceId DeviceId, const float DeltaTime, const float Duration) override;
508 virtual void ApplyDeviceProperty(const FPlatformUserId UserId, const FInputDeviceId DeviceId) override;
509 virtual FInputDeviceProperty* GetInternalDeviceProperty() override;
510 virtual float RecalculateDuration() override;
511
512 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Trigger")
514
516 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Trigger", meta = (GetOptions = "Engine.InputPlatformSettings.GetAllHardwareDeviceNames"))
517 TMap<FName, FAudioBasedVibrationData> DeviceOverrideData;
518
519private:
520
522 const FAudioBasedVibrationData* GetRelevantData(const FPlatformUserId UserId, const FInputDeviceId DeviceId) const;
523};
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
EInputDeviceTriggerMask
Definition IInputInterface.h:98
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
Definition Engine.Build.cs:7
Definition NameTypes.h:617
Definition UObjectGlobals.h:1292
Definition InputDevice.Build.cs:6
Definition UnrealString.h.inl:34
Definition CurveFloat.h:31
Definition CurveLinearColor.h:29
Definition SoundSubmix.h:568
Definition InputDeviceProperties.h:33
TDataLayout * GetDeviceSpecificDataMutable(const FPlatformUserId UserId, const FInputDeviceId DeviceId, TMap< FName, TDataLayout > &InMap)
Definition InputDeviceProperties.h:126
Definition InputDeviceSubsystem.h:120
static ENGINE_API UInputDeviceSubsystem * Get()
Definition InputDeviceSubsystem.cpp:180
Definition InputDeviceProperties.h:291
Definition InputDeviceProperties.h:334
Definition InputDeviceProperties.h:393
Definition InputDeviceProperties.h:450
Definition Object.h:95
Definition SoundBase.h:109
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
Definition RobinHoodHashTable.h:18
@ false
Definition radaudio_common.h:23
Definition InputDeviceProperties.h:486
Definition Color.h:486
Definition InputDeviceProperties.h:221
Definition InputDeviceProperties.h:166
Definition InputDeviceProperties.h:276
Definition InputDeviceProperties.h:314
Definition InputDeviceProperties.h:367
Definition InputDeviceProperties.h:426
Definition InputSettings.h:432
ENGINE_API bool IsValid() const
Definition InputSettings.cpp:648
FName HardwareDeviceIdentifier
Definition InputSettings.h:455
Definition CoreMiscDefines.h:524
Definition IInputInterface.h:148
Definition IInputInterface.h:120
Definition IInputInterface.h:193
Definition IInputInterface.h:181
Definition IInputInterface.h:207
Definition IInputInterface.h:229
Definition CoreMiscDefines.h:470
Definition UnrealType.h:7001
Definition ObjectPtr.h:488