From edebf12b12539fbbb6590f0f1d1cf685ed305a76 Mon Sep 17 00:00:00 2001 From: David Glover Date: Wed, 5 Nov 2025 18:12:42 -0800 Subject: [PATCH 1/6] Add player controller which caches ASC from player state and executes its input processing function --- .../ModularAbilityPlayerController.cpp | 52 +++++++++++++++++++ .../Public/ModularAbilityPlayerController.h | 30 +++++++++++ 2 files changed, 82 insertions(+) create mode 100644 Source/ModularGameplayAbilities/Private/ModularAbilityPlayerController.cpp create mode 100644 Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h diff --git a/Source/ModularGameplayAbilities/Private/ModularAbilityPlayerController.cpp b/Source/ModularGameplayAbilities/Private/ModularAbilityPlayerController.cpp new file mode 100644 index 0000000..d121f53 --- /dev/null +++ b/Source/ModularGameplayAbilities/Private/ModularAbilityPlayerController.cpp @@ -0,0 +1,52 @@ +#include "ModularAbilityPlayerController.h" + +#include "ModularAbilityPlayerState.h" +#include "ActorComponent/ModularAbilitySystemComponent.h" + +AModularAbilityPlayerController::AModularAbilityPlayerController(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ + AbilitySystemComponent = nullptr; +} + +void AModularAbilityPlayerController::OnPossess(APawn* APawn) +{ + Super::OnPossess(APawn); + + if (auto* PS = GetPlayerState()) + { + AbilitySystemComponent = PS->GetModularAbilitySystemComponent(); + } +} + +void AModularAbilityPlayerController::OnUnPossess() +{ + AbilitySystemComponent = nullptr; + + Super::OnUnPossess(); +} + +void AModularAbilityPlayerController::PostProcessInput(const float DeltaTime, const bool bGamePaused) +{ + if (AbilitySystemComponent.IsValid()) + { + AbilitySystemComponent->ProcessAbilityInput(DeltaTime, bGamePaused); + } + + Super::PostProcessInput(DeltaTime, bGamePaused); +} + +UModularAbilitySystemComponent* AModularAbilityPlayerController::GetAbilitySystemComponent() const +{ + return AbilitySystemComponent.Get(); +} + +void AModularAbilityPlayerController::OnRep_PlayerState() +{ + Super::OnRep_PlayerState(); + + if (const auto* PS = GetPlayerState()) + { + AbilitySystemComponent = PS->GetModularAbilitySystemComponent(); + } +} diff --git a/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h b/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h new file mode 100644 index 0000000..9e6e17a --- /dev/null +++ b/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h @@ -0,0 +1,30 @@ +#pragma once + +#include "CoreMinimal.h" +#include "ModularPlayerController.h" +#include "ModularAbilityPlayerController.generated.h" + +class UModularAbilitySystemComponent; + +UCLASS(Config = "Game") +class MODULARGAMEPLAYABILITIES_API AModularAbilityPlayerController : public AModularPlayerController +{ + GENERATED_BODY() + +public: + AModularAbilityPlayerController(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); + + virtual void OnPossess(APawn* APawn) override; + virtual void OnUnPossess() override; + virtual void PostProcessInput(const float DeltaTime, const bool bGamePaused) override; + + UModularAbilitySystemComponent* GetAbilitySystemComponent() const; + +protected: + virtual void OnRep_PlayerState() override; + +private: + // Cache ASC for input processing purposes + UPROPERTY(BlueprintReadOnly, Category = AbilitySystem, meta=(AllowPrivateAccess="true")) + TWeakObjectPtr AbilitySystemComponent; +}; From 811891dae80ebbb1e407b9c199c1a5d513bfc757 Mon Sep 17 00:00:00 2001 From: David Glover Date: Fri, 21 Nov 2025 12:22:00 -0800 Subject: [PATCH 2/6] Have AModularAbilityPlayerController inherit from ACommonPlayerController --- .../Public/ModularAbilityPlayerController.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h b/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h index 9e6e17a..7bba471 100644 --- a/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h +++ b/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h @@ -1,13 +1,14 @@ #pragma once #include "CoreMinimal.h" -#include "ModularPlayerController.h" +#include "CommonPlayerController.h" #include "ModularAbilityPlayerController.generated.h" + class UModularAbilitySystemComponent; UCLASS(Config = "Game") -class MODULARGAMEPLAYABILITIES_API AModularAbilityPlayerController : public AModularPlayerController +class MODULARGAMEPLAYABILITIES_API AModularAbilityPlayerController : public ACommonPlayerController { GENERATED_BODY() From a09b7c536f5d2eec4cb995acb8b220c6b38d1261 Mon Sep 17 00:00:00 2001 From: David Glover Date: Fri, 21 Nov 2025 12:24:12 -0800 Subject: [PATCH 3/6] Docstring --- .../Public/ModularAbilityPlayerController.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h b/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h index 7bba471..2705031 100644 --- a/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h +++ b/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h @@ -7,6 +7,12 @@ class UModularAbilitySystemComponent; +/** + * AModularAbilityPlayerController + * + * Drives ModularAbilitySystemComponent input processing. + * Inherits from ACommonPlayerController to work with CommonUI. + */ UCLASS(Config = "Game") class MODULARGAMEPLAYABILITIES_API AModularAbilityPlayerController : public ACommonPlayerController { From 81717c00dfcf46d5a61a2bdc230fed8980177454 Mon Sep 17 00:00:00 2001 From: David Glover Date: Fri, 21 Nov 2025 12:24:57 -0800 Subject: [PATCH 4/6] Inline generated cpp by name --- .../Private/ModularAbilityPlayerController.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/ModularGameplayAbilities/Private/ModularAbilityPlayerController.cpp b/Source/ModularGameplayAbilities/Private/ModularAbilityPlayerController.cpp index d121f53..a43717a 100644 --- a/Source/ModularGameplayAbilities/Private/ModularAbilityPlayerController.cpp +++ b/Source/ModularGameplayAbilities/Private/ModularAbilityPlayerController.cpp @@ -3,6 +3,8 @@ #include "ModularAbilityPlayerState.h" #include "ActorComponent/ModularAbilitySystemComponent.h" +#include UE_INLINE_GENERATED_CPP_BY_NAME(ModularAbilityPlayerController) + AModularAbilityPlayerController::AModularAbilityPlayerController(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { From 0b6c1ee3edd2b51e08b5ec28c072793bf55cc568 Mon Sep 17 00:00:00 2001 From: David Glover Date: Fri, 21 Nov 2025 12:26:35 -0800 Subject: [PATCH 5/6] remove Config="Game" --- .../Public/ModularAbilityPlayerController.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h b/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h index 2705031..7f6c115 100644 --- a/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h +++ b/Source/ModularGameplayAbilities/Public/ModularAbilityPlayerController.h @@ -13,7 +13,7 @@ class UModularAbilitySystemComponent; * Drives ModularAbilitySystemComponent input processing. * Inherits from ACommonPlayerController to work with CommonUI. */ -UCLASS(Config = "Game") +UCLASS() class MODULARGAMEPLAYABILITIES_API AModularAbilityPlayerController : public ACommonPlayerController { GENERATED_BODY() From 8aa843fd018d5dee693a207aaf00f97e38fcb694 Mon Sep 17 00:00:00 2001 From: David Glover Date: Fri, 21 Nov 2025 14:06:16 -0800 Subject: [PATCH 6/6] Add CommonGame to build.cs --- .../ModularGameplayAbilities/ModularGameplayAbilities.Build.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/ModularGameplayAbilities/ModularGameplayAbilities.Build.cs b/Source/ModularGameplayAbilities/ModularGameplayAbilities.Build.cs index 3ea4cc7..1f2db71 100644 --- a/Source/ModularGameplayAbilities/ModularGameplayAbilities.Build.cs +++ b/Source/ModularGameplayAbilities/ModularGameplayAbilities.Build.cs @@ -26,6 +26,7 @@ public ModularGameplayAbilities(ReadOnlyTargetRules Target) : base(Target) "Core", "GameFeatures", "GameplayAbilities", + "CommonGame", "ModalCamera", "ModularGameplay", "ModularGameplayExperiences"