#include "GasaEffectActor.h" #include "AbilitySystemInterface.h" #include "GasaAttributeSet.h" #include "GasaAttributeSet_Inlines.h" #include "Components/SphereComponent.h" AGasaEffectActor::AGasaEffectActor() { PrimaryActorTick.bCanEverTick = false; Mesh = CreateDefaultSubobject("Mesh"); Sphere = CreateDefaultSubobject("Sphere"); SetRootComponent(Mesh); Sphere->SetupAttachment(Mesh); } void AGasaEffectActor::OnOverlapBegin(UPrimitiveComponent* OverlappedComponent , AActor* OtherActor , UPrimitiveComponent* OtherComp , int32 OtherBodyIndex , bool bFromSweep , FHitResult const& SweepResult) { // Demo of "restricted way" if ( ! OtherActor->Implements()) return; IAbilitySystemInterface* ASI = Cast(OtherActor); if (ASI == nullptr) return; // TODO(Ed): Change this to use a gameplay effect instead UAbilitySystemComponent* AbilitySystem = ASI->GetAbilitySystemComponent(); UGasaAttributeSet* MutAttributes = const_cast(Gasa::GetAttributeSet(AbilitySystem)); MutAttributes->SetHealth( MutAttributes->GetHealth() + 25.f ); Destroy(); } void AGasaEffectActor::OnOverlapEnd(UPrimitiveComponent* OverlappedComponent , AActor* OtherActor , UPrimitiveComponent* OtherComp , int32 OtherBodyIndex) { } void AGasaEffectActor::BeginPlay() { Super::BeginPlay(); } void AGasaEffectActor::PostInitializeComponents() { Super::PostInitializeComponents(); Sphere->OnComponentBeginOverlap.AddUniqueDynamic(this, &ThisClass::OnOverlapBegin); Sphere->OnComponentEndOverlap.AddUniqueDynamic(this, &ThisClass::OnOverlapEnd); }