From b7ef83d580045463175151f995cff78af76320a5 Mon Sep 17 00:00:00 2001 From: Viktor Blomme Date: Wed, 19 Jun 2024 01:03:29 +0200 Subject: [PATCH 1/3] Use structured binding --- .../Components/GBFAbilityInputBufferComponent.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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() ); } From 1725c39cefcfe3b26af0dfec60374a3992ed370a Mon Sep 17 00:00:00 2001 From: Viktor Blomme Date: Wed, 19 Jun 2024 01:05:15 +0200 Subject: [PATCH 2/3] Make sure map can't be garbage collected --- .../Characters/Components/GBFHeroComponent.cpp | 6 +++--- .../Characters/Components/GBFHeroComponent.h | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) 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 From d0c54ed4d1e1c46e4681b99e156b6be2b3d98727 Mon Sep 17 00:00:00 2001 From: Dimitri Paccagnini Date: Wed, 3 Jul 2024 13:23:16 +0200 Subject: [PATCH 3/3] changed constructor with objinit --- .../Private/Characters/GBFSimpleCharacterWithAbilities.cpp | 2 +- .../Public/Characters/GBFSimpleCharacterWithAbilities.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/GameBaseFramework/Private/Characters/GBFSimpleCharacterWithAbilities.cpp b/Source/GameBaseFramework/Private/Characters/GBFSimpleCharacterWithAbilities.cpp index d5407b7c..3d95ad06 100644 --- a/Source/GameBaseFramework/Private/Characters/GBFSimpleCharacterWithAbilities.cpp +++ b/Source/GameBaseFramework/Private/Characters/GBFSimpleCharacterWithAbilities.cpp @@ -3,7 +3,7 @@ #include "GAS/Abilities/GBFAbilitySet.h" #include "GAS/Components/GBFAbilitySystemComponent.h" -AGBFSimpleCharacterWithAbilities::AGBFSimpleCharacterWithAbilities() +AGBFSimpleCharacterWithAbilities::AGBFSimpleCharacterWithAbilities( const FObjectInitializer & object_initializer ) { PrimaryActorTick.bCanEverTick = true; diff --git a/Source/GameBaseFramework/Public/Characters/GBFSimpleCharacterWithAbilities.h b/Source/GameBaseFramework/Public/Characters/GBFSimpleCharacterWithAbilities.h index 8c62e75e..794c9921 100644 --- a/Source/GameBaseFramework/Public/Characters/GBFSimpleCharacterWithAbilities.h +++ b/Source/GameBaseFramework/Public/Characters/GBFSimpleCharacterWithAbilities.h @@ -24,7 +24,7 @@ class GAMEBASEFRAMEWORK_API AGBFSimpleCharacterWithAbilities : public ACharacter GENERATED_BODY() public: - AGBFSimpleCharacterWithAbilities(); + explicit AGBFSimpleCharacterWithAbilities( const FObjectInitializer & object_initializer ); UAbilitySystemComponent * GetAbilitySystemComponent() const override; void PostInitializeComponents() override;