#include "GasaEffectActorDemo.h" #include "AbilitySystemInterface.h" #include "GasaAttributeSet.h" #include "GasaAttributeSet_Inlines.h" #include "Components/SphereComponent.h" #include "Components/StaticMeshComponent.h" AGasaEffectActorDemo::AGasaEffectActorDemo() { PrimaryActorTick.bCanEverTick = false; Mesh = CreateDefaultSubobject("Mesh"); Sphere = CreateDefaultSubobject("Sphere"); SetRootComponent(Mesh); Sphere->SetupAttachment(Mesh); } void AGasaEffectActorDemo::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 ); MutAttributes->SetMana( MutAttributes->GetMana() - 25.f ); Destroy(); } void AGasaEffectActorDemo::OnOverlapEnd(UPrimitiveComponent* OverlappedComponent , AActor* OtherActor , UPrimitiveComponent* OtherComp , int32 OtherBodyIndex) { } void AGasaEffectActorDemo::BeginPlay() { Super::BeginPlay(); } void AGasaEffectActorDemo::PostInitializeComponents() { Super::PostInitializeComponents(); Sphere->OnComponentBeginOverlap.AddUniqueDynamic(this, &ThisClass::OnOverlapBegin); Sphere->OnComponentEndOverlap.AddUniqueDynamic(this, &ThisClass::OnOverlapEnd); }