// Copyright Echo Devgroup #pragma once #include "CoreMinimal.h" #include "ActiveGameplayEffectHandle.h" #include "GameplayEffectTypes.h" #include "GameFramework/Actor.h" #include "AuraEffectActor.generated.h" class UAbilitySystemComponent; class UGameplayEffect; UENUM(BlueprintType) enum class EEffectApplicationPolicy :uint8 { ApplyOnOverlap, ApplyOnEndOverlap, DoNotApply }; UENUM(BlueprintType) enum class EEffectRemovalPolicy :uint8 { RemoveOnEndOverlap, DoNotRemove }; UCLASS() class AURA_API AAuraEffectActor : public AActor { GENERATED_BODY() public: AAuraEffectActor(); protected: virtual void BeginPlay() override; UFUNCTION(BlueprintCallable) void OnOverlap(AActor* TargetActor); UFUNCTION(BlueprintCallable) void OnEndOverlap(AActor* TargetActor); UPROPERTY(EditAnywhere) bool bDestroyOnEffectRemoval = false; UFUNCTION(BlueprintCallable) void ApplyEffectToTarget(AActor* TargetActor, TSubclassOf GameplayEffectClass); //Instant Gameplay Effects UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects") TSubclassOf InstantGameplayEffectClass; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects") EEffectApplicationPolicy InstantEffectApplicationPolicy = EEffectApplicationPolicy::DoNotApply; //Duration Gameplay Effects UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects") TSubclassOf DurationGameplayEffectClass; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects") EEffectApplicationPolicy DurationEffectApplicationPolicy = EEffectApplicationPolicy::DoNotApply; //Infinite Gameplay Effects UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects") TSubclassOf InfiniteGameplayEffectClass; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects") EEffectApplicationPolicy InfiniteEffectApplicationPolicy = EEffectApplicationPolicy::DoNotApply; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects") EEffectRemovalPolicy InfiniteEffectRemovalPolicy = EEffectRemovalPolicy::RemoveOnEndOverlap; TMap ActiveEffectHandles; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects") float ActorLevel = 1.f; private: };