diff --git a/Source/GameBaseFramework/Private/Characters/Components/GBFAbilityInputBufferComponent.cpp b/Source/GameBaseFramework/Private/Characters/Components/GBFAbilityInputBufferComponent.cpp index 205d5a61..1eb14b72 100644 --- a/Source/GameBaseFramework/Private/Characters/Components/GBFAbilityInputBufferComponent.cpp +++ b/Source/GameBaseFramework/Private/Characters/Components/GBFAbilityInputBufferComponent.cpp @@ -86,11 +86,13 @@ void UGBFAbilityInputBufferComponent::BindActions() return; } - for ( auto & input_config : hero_component->GetBoundActionsByInputconfig() ) + auto & actions_per_input_config = hero_component->GetBoundActionsByInputconfig(); + + for ( auto & [ input_config, actions ] : actions_per_input_config ) { for ( auto & tag : InputTagsToCheck ) { - if ( const auto * input_action = input_config.Key->FindAbilityInputActionForTag( tag ) ) + if ( const auto * input_action = input_config->FindAbilityInputActionForTag( tag ) ) { BindHandles.Add( input_component->BindAction( input_action, ETriggerEvent::Triggered, this, &ThisClass::AbilityInputTagPressed, tag ).GetHandle() ); } diff --git a/Source/GameBaseFramework/Private/Characters/Components/GBFHeroComponent.cpp b/Source/GameBaseFramework/Private/Characters/Components/GBFHeroComponent.cpp index 3a858610..1a40842d 100644 --- a/Source/GameBaseFramework/Private/Characters/Components/GBFHeroComponent.cpp +++ b/Source/GameBaseFramework/Private/Characters/Components/GBFHeroComponent.cpp @@ -175,7 +175,7 @@ void UGBFHeroComponent::AddAdditionalInputConfig( const UGBFInputConfig * input_ if ( ensureAlways( BoundActionsByInputConfig.Find( input_config ) == nullptr ) ) { auto & bind_handles = BoundActionsByInputConfig.Add( input_config ); - input_component->BindAbilityActions( input_config, this, &ThisClass::Input_AbilityInputTagPressed, &ThisClass::Input_AbilityInputTagReleased, /*out*/ bind_handles ); + input_component->BindAbilityActions( input_config, this, &ThisClass::Input_AbilityInputTagPressed, &ThisClass::Input_AbilityInputTagReleased, /*out*/ bind_handles.Handles ); } } } @@ -196,7 +196,7 @@ void UGBFHeroComponent::RemoveAdditionalInputConfig( const UGBFInputConfig * inp if ( auto * bind_handles = BoundActionsByInputConfig.Find( input_config ) ) { - input_component->RemoveBinds( *bind_handles ); + input_component->RemoveBinds( bind_handles->Handles ); BoundActionsByInputConfig.Remove( input_config ); } } @@ -224,7 +224,7 @@ void UGBFHeroComponent::ClearAbilityCameraMode( const FGameplayAbilitySpecHandle } } -const TMap< const UGBFInputConfig *, TArray< uint32 > > & UGBFHeroComponent::GetBoundActionsByInputconfig() const +const TMap< const UGBFInputConfig *, FGBFBoundInputHandles > & UGBFHeroComponent::GetBoundActionsByInputconfig() const { return BoundActionsByInputConfig; } diff --git a/Source/GameBaseFramework/Public/Characters/Components/GBFHeroComponent.h b/Source/GameBaseFramework/Public/Characters/Components/GBFHeroComponent.h index 667dafdd..18b1889f 100644 --- a/Source/GameBaseFramework/Public/Characters/Components/GBFHeroComponent.h +++ b/Source/GameBaseFramework/Public/Characters/Components/GBFHeroComponent.h @@ -12,6 +12,16 @@ class UGBFInputComponent; class UGBFInputConfig; class UGBFCameraMode; +USTRUCT() +struct FGBFBoundInputHandles +{ + GENERATED_BODY() + +public: + UPROPERTY() + TArray< uint32 > Handles; +}; + UCLASS( abstract ) class GAMEBASEFRAMEWORK_API UGBFHeroComponent : public UGBFPawnComponent { @@ -48,7 +58,7 @@ class GAMEBASEFRAMEWORK_API UGBFHeroComponent : public UGBFPawnComponent /** Clears the camera override if it is set */ void ClearAbilityCameraMode( const FGameplayAbilitySpecHandle & owning_spec_handle ); - const TMap< const UGBFInputConfig *, TArray< uint32 > > & GetBoundActionsByInputconfig() const; + const TMap< const UGBFInputConfig *, FGBFBoundInputHandles > & GetBoundActionsByInputconfig() const; protected: void OnRegister() override; @@ -82,10 +92,11 @@ class GAMEBASEFRAMEWORK_API UGBFHeroComponent : public UGBFPawnComponent UPROPERTY() TSubclassOf< UGBFCameraMode > AbilityCameraMode; + UPROPERTY() + TMap< const UGBFInputConfig *, FGBFBoundInputHandles > BoundActionsByInputConfig; + /** Spec handle for the last ability to set a camera mode. */ FGameplayAbilitySpecHandle AbilityCameraModeOwningSpecHandle; - - TMap< const UGBFInputConfig *, TArray< uint32 > > BoundActionsByInputConfig; }; FORCEINLINE bool UGBFHeroComponent::IsReadyToBindInputs() const