53. Gameplay Effect Delegates

This commit is contained in:
Edward R. Gonzalez 2024-04-25 12:46:26 -04:00
parent 33b3723b82
commit c4e40037ed
3 changed files with 33 additions and 9 deletions

View File

@ -1 +1,20 @@
#include "GasaAbilitySystemComponent.h"
#include "GasaAbilitySystemComponent.h"
#include "Engine/Engine.h"
void UGasaAbilitySystemComp::OnAbilityActorInfoSet()
{
}
void UGasaAbilitySystemComp::EffectApplied(UAbilitySystemComponent* AbilitySystem, FGameplayEffectSpec const& Spec,
FActiveGameplayEffectHandle ActiveEffect)
{
GEngine->AddOnScreenDebugMessage(1, 8.f, FColor::Yellow, FString("Effect applied"));
}
void UGasaAbilitySystemComp::InitAbilityActorInfo(AActor* InOwnerActor, AActor* InAvatarActor)
{
Super::InitAbilityActorInfo(InOwnerActor, InAvatarActor);
OnGameplayEffectAppliedDelegateToSelf.AddUObject(this, & ThisClass::EffectApplied);
}

View File

@ -6,10 +6,17 @@
#include "GasaAbilitySystemComponent.generated.h"
UCLASS(BlueprintType)
class GASA_API UGasaAbilitySystemComp : public UAbilitySystemComponent
{
GENERATED_BODY()
public:
// TODO(Ed): If hes only using this to bind the EffectApplied to a delegate, then just use the init override instead.
void OnAbilityActorInfoSet();
void EffectApplied(UAbilitySystemComponent* AbilitySystem, FGameplayEffectSpec const& Spec, FActiveGameplayEffectHandle ActiveEffect);
#pragma region AbilitySystemComponent
void InitAbilityActorInfo(AActor* InOwnerActor, AActor* InAvatarActor) override;
#pragma endregion AbilitySystemComponent
};

View File

@ -155,12 +155,11 @@ void AGasaCharacter::PossessedBy(AController* NewController)
if (GetMesh() && IsReplicatingMovement() && (GetRemoteRole() == ROLE_AutonomousProxy && GetNetConnection() != nullptr))
GetMesh()->bOnlyAllowAutonomousTickPose = true;
}
#if 0
if (bAutoAbilitySystem)
{
// TODO(Ed): Do we need to do this for enemies?
AbilitySystem->InitAbilityActorInfo(this, this);
}
#endif
}
void AGasaCharacter::SetPlayerDefaults()
@ -179,11 +178,10 @@ void AGasaCharacter::BeginPlay()
{
Super::BeginPlay();
// TODO(Ed): Find out if this is the best spot todo this
// There is also OnPossessed, PostInitializeComponents, etc...
if (bAutoAbilitySystem)
{
// TODO(Ed): Do we need to do this for enemies?
AbilitySystem->InitAbilityActorInfo(this, this);
}
}
void AGasaCharacter::Tick(float DeltaSeconds)