// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Components/ActorComponent.h" #include "GameplayTagContainer.h" #include "LyraContextEffectsInterface.h" #include "UObject/SoftObjectPtr.h" #include "LyraContextEffectComponent.generated.h" class ULyraContextEffectsLibrary; class UNiagaraComponent; class UAudioComponent; UCLASS( ClassGroup=(Custom), hidecategories = (Variable, Tags, ComponentTick, ComponentReplication, Activation, Cooking, AssetUserData, Collision), CollapseCategories, meta=(BlueprintSpawnableComponent) ) class LYRAGAME_API ULyraContextEffectComponent : public UActorComponent, public ILyraContextEffectsInterface { GENERATED_BODY() public: // Sets default values for this component's properties ULyraContextEffectComponent(); protected: // Called when the game starts virtual void BeginPlay() override; // Called when the game ends virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; public: // AnimMotionEffect Implementation UFUNCTION(BlueprintCallable) virtual void AnimMotionEffect_Implementation(const FName Bone, const FGameplayTag MotionEffect, USceneComponent* StaticMeshComponent, const FVector LocationOffset, const FRotator RotationOffset, const UAnimSequenceBase* AnimationSequence, const bool bHitSuccess, const FHitResult HitResult, FGameplayTagContainer Contexts, FVector VFXScale = FVector(1), float AudioVolume = 1, float AudioPitch = 1) override; // Auto-Convert Physical Surface from Trace Result to Context UPROPERTY(EditAnywhere, BlueprintReadOnly) bool bConvertPhysicalSurfaceToContext = true; // Default Contexts UPROPERTY(EditAnywhere) FGameplayTagContainer DefaultEffectContexts; // Default Libraries for this Actor UPROPERTY(EditAnywhere) TSet> DefaultContextEffectsLibraries; UFUNCTION(BlueprintCallable) void UpdateEffectContexts(FGameplayTagContainer NewEffectContexts); UFUNCTION(BlueprintCallable) void UpdateLibraries(TSet> NewContextEffectsLibraries); private: UPROPERTY(Transient) FGameplayTagContainer CurrentContexts; UPROPERTY(Transient) TSet> CurrentContextEffectsLibraries; UPROPERTY(Transient) TArray ActiveAudioComponents; UPROPERTY(Transient) TArray ActiveNiagaraComponents; };