diff --git a/Plugins/VRGAS/Source/VRGAS/Private/Input/VRInputConfig.cpp b/Plugins/VRGAS/Source/VRGAS/Private/Input/VRInputConfig.cpp index e56ec5f..3b60cba 100644 --- a/Plugins/VRGAS/Source/VRGAS/Private/Input/VRInputConfig.cpp +++ b/Plugins/VRGAS/Source/VRGAS/Private/Input/VRInputConfig.cpp @@ -3,11 +3,13 @@ #include "Input/VRInputConfig.h" +#include "Logging.h" + UInputAction* UVRInputConfig::FindNativeInputActionForTag(const FGameplayTag& InTag, bool bLogNotFound) const { if (!InTag.IsValid()) return nullptr; - for (const FVRTagInputAction& Action : NativeInputActions) + for (const FVRTagInputBinding& Action : NativeInputActions) { if (!Action.IsValid()) continue; @@ -19,7 +21,8 @@ UInputAction* UVRInputConfig::FindNativeInputActionForTag(const FGameplayTag& In if (bLogNotFound) { - // TODO: Add logging for VRGAS + UE_LOG(VRGAS_Log, Error, TEXT("Could not find Native Action for Tag %s on InputConfig %s"), + *InTag.ToString(), *GetNameSafe(this)) } return nullptr; @@ -28,7 +31,7 @@ UInputAction* UVRInputConfig::FindAbilityInputActionForTag(const FGameplayTag& I { if (!InTag.IsValid()) return nullptr; - for (const FVRTagInputAction& Action : AbilityInputActions) + for (const FVRTagInputBinding& Action : AbilityInputActions) { if (!Action.IsValid() && Action.InputTag.IsValid()) { diff --git a/Plugins/VRGAS/Source/VRGAS/Private/Logging.cpp b/Plugins/VRGAS/Source/VRGAS/Private/Logging.cpp new file mode 100644 index 0000000..cac3ba0 --- /dev/null +++ b/Plugins/VRGAS/Source/VRGAS/Private/Logging.cpp @@ -0,0 +1,3 @@ +#include "Logging.h" + +DEFINE_LOG_CATEGORY(VRGAS_Log) \ No newline at end of file diff --git a/Plugins/VRGAS/Source/VRGAS/Private/Logging.h b/Plugins/VRGAS/Source/VRGAS/Private/Logging.h new file mode 100644 index 0000000..36cfe50 --- /dev/null +++ b/Plugins/VRGAS/Source/VRGAS/Private/Logging.h @@ -0,0 +1,5 @@ +#pragma once + +#include "CoreMinimal.h" + +DECLARE_LOG_CATEGORY_EXTERN(VRGAS_Log, Log, All) \ No newline at end of file diff --git a/Plugins/VRGAS/Source/VRGAS/Public/Input/VRInputComponent.h b/Plugins/VRGAS/Source/VRGAS/Public/Input/VRInputComponent.h index 6ebffc0..d1012dd 100644 --- a/Plugins/VRGAS/Source/VRGAS/Public/Input/VRInputComponent.h +++ b/Plugins/VRGAS/Source/VRGAS/Public/Input/VRInputComponent.h @@ -4,6 +4,7 @@ #include "CoreMinimal.h" #include "EnhancedInputComponent.h" +#include "VRInputConfig.h" #include "VRInputComponent.generated.h" @@ -12,4 +13,36 @@ class VRGAS_API UVRInputComponent : public UEnhancedInputComponent { GENERATED_BODY() + template + void BindNativeActions(const UVRInputConfig* InputConfig, const FGameplayTag& InputTag, ETriggerEvent TriggerEvent, + UserClass* Object,FuncType Func, bool bLogNotFound = true); + + template + void BindAbilityActions(const UVRInputConfig* InputConfig, UserClass* Object, PressedFuncType PressedFunc, ReleasedFuncType ReleasedFunc); }; + +template +void UVRInputComponent::BindNativeActions(const UVRInputConfig* InputConfig, const FGameplayTag& InputTag, ETriggerEvent TriggerEvent, + UserClass* Object,FuncType Func, const bool bLogNotFound) +{ + check(InputConfig) + if (UInputAction* Action = InputConfig->FindNativeInputActionForTag(InputTag, bLogNotFound)) + { + BindAction(Action, TriggerEvent, Object, Func); + } +} + +template +void UVRInputComponent::BindAbilityActions(const UVRInputConfig* InputConfig, UserClass* Object, PressedFuncType PressedFunc, ReleasedFuncType ReleasedFunc); +{ + check(InputConfig) + for (const FVRTagInputBinding& Binding : InputConfig->AbilityInputActions) + { + if (Binding.IsValid()) + { + if (PressedFunc) BindAction(Binding.InputAction, ETriggerEvent::Started, Object, PressedFunc, Binding.InputTag); + + if (ReleasedFunc) BindAction(Binding.InputAction, ETriggerEvent::Completed, Object, ReleasedFunc, Binding.InputTag); + } + } +} \ No newline at end of file diff --git a/Plugins/VRGAS/Source/VRGAS/Public/Input/VRInputConfig.h b/Plugins/VRGAS/Source/VRGAS/Public/Input/VRInputConfig.h index 691ca53..66d643b 100644 --- a/Plugins/VRGAS/Source/VRGAS/Public/Input/VRInputConfig.h +++ b/Plugins/VRGAS/Source/VRGAS/Public/Input/VRInputConfig.h @@ -11,7 +11,7 @@ class UInputAction; USTRUCT(BlueprintType) -struct FVRTagInputAction +struct FVRTagInputBinding { GENERATED_BODY() @@ -26,6 +26,7 @@ struct FVRTagInputAction return InputTag.IsValid() && InputAction != nullptr; } }; + /** * */ @@ -36,10 +37,10 @@ class VRGAS_API UVRInputConfig : public UDataAsset public: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Meta = (TitleProperty = "InputAction")) - TArray NativeInputActions; + TArray NativeInputActions; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Meta = (TitleProperty = "InputAction")) - TArray AbilityInputActions; + TArray AbilityInputActions; UFUNCTION(BlueprintCallable, Category = "Input") UInputAction* FindNativeInputActionForTag(const FGameplayTag& InTag, bool bLogNotFound = true) const;