// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Array.h" #include "EnhancedInputComponent.h" #include "GameplayTagContainer.h" #include "HAL/Platform.h" #include "InputTriggers.h" #include "LyraInputConfig.h" #include "Misc/AssertionMacros.h" #include "UObject/UObjectGlobals.h" #include "LyraInputComponent.generated.h" class UEnhancedInputLocalPlayerSubsystem; class UInputAction; class UObject; /** * ULyraInputComponent * * Component used to manage input mappings and bindings using an input config data asset. */ UCLASS(Config = Input) class ULyraInputComponent : public UEnhancedInputComponent { GENERATED_BODY() public: ULyraInputComponent(const FObjectInitializer& ObjectInitializer); void AddInputMappings(const ULyraInputConfig* InputConfig, UEnhancedInputLocalPlayerSubsystem* InputSubsystem) const; void RemoveInputMappings(const ULyraInputConfig* InputConfig, UEnhancedInputLocalPlayerSubsystem* InputSubsystem) const; template void BindNativeAction(const ULyraInputConfig* InputConfig, const FGameplayTag& InputTag, ETriggerEvent TriggerEvent, UserClass* Object, FuncType Func, bool bLogIfNotFound); template void BindAbilityActions(const ULyraInputConfig* InputConfig, UserClass* Object, PressedFuncType PressedFunc, ReleasedFuncType ReleasedFunc, TArray& BindHandles); void RemoveBinds(TArray& BindHandles); }; template void ULyraInputComponent::BindNativeAction(const ULyraInputConfig* InputConfig, const FGameplayTag& InputTag, ETriggerEvent TriggerEvent, UserClass* Object, FuncType Func, bool bLogIfNotFound) { check(InputConfig); if (const UInputAction* IA = InputConfig->FindNativeInputActionForTag(InputTag, bLogIfNotFound)) { BindAction(IA, TriggerEvent, Object, Func); } } template void ULyraInputComponent::BindAbilityActions(const ULyraInputConfig* InputConfig, UserClass* Object, PressedFuncType PressedFunc, ReleasedFuncType ReleasedFunc, TArray& BindHandles) { check(InputConfig); for (const FLyraInputAction& Action : InputConfig->AbilityInputActions) { if (Action.InputAction && Action.InputTag.IsValid()) { if (PressedFunc) { BindHandles.Add(BindAction(Action.InputAction, ETriggerEvent::Triggered, Object, PressedFunc, Action.InputTag).GetHandle()); } if (ReleasedFunc) { BindHandles.Add(BindAction(Action.InputAction, ETriggerEvent::Completed, Object, ReleasedFunc, Action.InputTag).GetHandle()); } } } }