// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "UObject/Object.h" #include "UObject/SoftObjectPath.h" #include "Templates/SubclassOf.h" #include "InputCoreTypes.h" #include "Engine/StreamableManager.h" #include "Templates/SharedPointer.h" #include "CommonInputActionDomain.h" #include "CommonInputSubsystem.h" #include "CommonInputBaseTypes.h" #include "Engine/DataTable.h" #include "Engine/PlatformSettings.h" #include "CommonInputSettings.generated.h" #define UE_API COMMONINPUT_API class UInputAction; UCLASS(MinimalAPI, config = Game, defaultconfig) class UCommonInputSettings : public UDeveloperSettings { GENERATED_BODY() public: UE_API UCommonInputSettings(const FObjectInitializer& Initializer); // Called to load CommonUISetting data, if bAutoLoadData if set to false then game code must call LoadData(). UE_API void LoadData(); #if WITH_EDITOR UE_API virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override; #endif // Called to check that the data we have previously attempted to load is actually loaded and will attempt to load if it is not. UE_API void ValidateData(); UE_API FDataTableRowHandle GetDefaultClickAction() const; UE_API FDataTableRowHandle GetDefaultBackAction() const; /** Default Hold Data */ UE_API TSubclassOf GetDefaultHoldData() const; UE_API UInputAction* GetEnhancedInputClickAction() const; UE_API UInputAction* GetEnhancedInputBackAction() const; bool GetEnableInputMethodThrashingProtection() const { return bEnableInputMethodThrashingProtection; } int32 GetInputMethodThrashingLimit() const { return InputMethodThrashingLimit; } double GetInputMethodThrashingWindowInSeconds() const { return InputMethodThrashingWindowInSeconds; } double GetInputMethodThrashingCooldownInSeconds() const { return InputMethodThrashingCooldownInSeconds; } bool GetAllowOutOfFocusDeviceInput() const { return bAllowOutOfFocusDeviceInput; } bool GetEnableDefaultInputConfig() const { return bEnableDefaultInputConfig; } bool GetEnableEnhancedInputSupport() const { return bEnableEnhancedInputSupport; } bool GetEnableAutomaticGamepadTypeDetection() const { return bEnableAutomaticGamepadTypeDetection; } TObjectPtr GetActionDomainTable() const { return ActionDomainTablePtr; } const TMap& GetPlatformNameUpgradeMap() const { return PlatformNameUpgrades; } public: /** Static version of enhanced input support check, exists to hide based on edit condition */ UFUNCTION() static UE_API bool IsEnhancedInputSupportEnabled(); private: UE_API virtual void PostInitProperties() override; /** Create a derived asset from UCommonUIInputData to store Input data for your game.*/ UPROPERTY(config, EditAnywhere, Category = "Input", Meta=(AllowAbstract=false)) TSoftClassPtr InputData; UPROPERTY(EditAnywhere, Category = "Input") FPerPlatformSettings PlatformInput; UPROPERTY(config) TMap CommonInputPlatformData_DEPRECATED; UPROPERTY(config, EditAnywhere, Category = "Thrashing Settings") bool bEnableInputMethodThrashingProtection = true; UPROPERTY(config, EditAnywhere, Category = "Thrashing Settings") int32 InputMethodThrashingLimit = 30; UPROPERTY(config, EditAnywhere, Category = "Thrashing Settings") double InputMethodThrashingWindowInSeconds = 3.0; UPROPERTY(config, EditAnywhere, Category = "Thrashing Settings") double InputMethodThrashingCooldownInSeconds = 1.0; UPROPERTY(config, EditAnywhere, Category = "Input") bool bAllowOutOfFocusDeviceInput = false; /** * Controls whether a default Input Config will be set when the active CommonActivatableWidgets do not specify a desired one. * Disable this if you want to control the Input Mode via alternative means. */ UPROPERTY(config, EditAnywhere, Category = "Input") bool bEnableDefaultInputConfig = true; /** Controls if Enhanced Input Support plugin-wide. Requires restart due to caching. */ UPROPERTY(config, EditAnywhere, Category = "Input", meta = (ConfigRestartRequired = true)) bool bEnableEnhancedInputSupport = false; /** * Controls automatic detection of the gamepad type. * Disable this if you want to manually control the gamepad type using the UCommonInputSubsystem::SetGamepadInputType() function. */ UPROPERTY(config, EditAnywhere, Category = "Input") bool bEnableAutomaticGamepadTypeDetection = true; /** Create a derived asset from UCommonInputActionDomainTable to store ordered ActionDomain data for your game */ UPROPERTY(config, EditAnywhere, Category = "Action Domain") TSoftObjectPtr ActionDomainTable; /** * A map of Common Input platform names to a new one, which you can use * to upgrade your Input Action data tables if you add a new platform to your * project and wish to copy from some existing data */ UPROPERTY(config, EditAnywhere, Category = "Input", meta = (ConfigRestartRequired = true)) TMap PlatformNameUpgrades; private: UE_API void LoadInputData(); UE_API void LoadActionDomainTable(); bool bInputDataLoaded; bool bActionDomainTableLoaded; UPROPERTY(Transient) TSubclassOf InputDataClass; UPROPERTY(Transient) TObjectPtr ActionDomainTablePtr; }; #undef UE_API