Files
ElistriaCalling/Elistria_Calling/Source/Elistria_Calling/Public/ElistriaEnhancedInputComponent.h
2025-10-06 04:18:03 -06:00

56 lines
1.5 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "EnhancedInputComponent.h"
#include "PlayerGameplayAbilitiesDataAsset.h"
#include "ElistriaEnhancedInputComponent.generated.h"
/**
*
*/
UCLASS()
class ELISTRIA_CALLING_API UElistriaEnhancedInputComponent : public UEnhancedInputComponent
{
GENERATED_BODY()
public:
template <class UserClass>
void BindAbilityActionsByTag(const UPlayerGameplayAbilitiesDataAsset* InputConfig, UserClass* Object,
void (UserClass::*Func)(const FInputActionInstance&, FGameplayTag));
UFUNCTION(BlueprintCallable, Category="Input")
void ClearAbilityBindings();
private:
TArray<int32> AbilityActionBindings;
};
template <class UserClass>
void UElistriaEnhancedInputComponent::BindAbilityActionsByTag(const UPlayerGameplayAbilitiesDataAsset* InputConfig, UserClass* Object, void (UserClass::*Func)(const FInputActionInstance&, FGameplayTag))
{
if (!InputConfig||!Func) return;
static const ETriggerEvent EventsToBind[]={
ETriggerEvent::Started,
ETriggerEvent::Completed,
ETriggerEvent::Canceled,
ETriggerEvent::Triggered,
ETriggerEvent::Ongoing
};
for (const FGameplayInputAbilityInfo& Info : InputConfig->AbilityMappings)
{
if (!Info.IsValid()) continue;
for (ETriggerEvent Event : EventsToBind)
{
FEnhancedInputActionEventBinding& Binding = BindAction(Info.InputAction,Event,Object,Func,Info.InputTag);
AbilityActionBindings.Add(Binding.GetHandle());
}
}
{
}
}