// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Chaos/ChaosEngineInterface.h" #include "Containers/Array.h" #include "Containers/EnumAsByte.h" #include "Containers/Map.h" #include "Containers/Set.h" #include "Engine/DeveloperSettings.h" #include "GameplayTagContainer.h" #include "Math/MathFwd.h" #include "Math/Rotator.h" #include "Math/Vector.h" #include "Subsystems/WorldSubsystem.h" #include "UObject/NameTypes.h" #include "UObject/Object.h" #include "UObject/SoftObjectPtr.h" #include "UObject/UObjectGlobals.h" #include "LyraContextEffectsSubsystem.generated.h" class AActor; class UAudioComponent; class ULyraContextEffectsLibrary; class UNiagaraComponent; class USceneComponent; struct FFrame; struct FGameplayTag; struct FGameplayTagContainer; /** * */ UCLASS(config = Game, defaultconfig, meta = (DisplayName = "LyraContextEffects")) class LYRAGAME_API ULyraContextEffectsSettings : public UDeveloperSettings { GENERATED_BODY() public: // UPROPERTY(config, EditAnywhere) TMap, FGameplayTag> SurfaceTypeToContextMap; }; /** * */ UCLASS() class LYRAGAME_API ULyraContextEffectsSet : public UObject { GENERATED_BODY() public: UPROPERTY(Transient) TSet> LyraContextEffectsLibraries; }; /** * */ UCLASS() class LYRAGAME_API ULyraContextEffectsSubsystem : public UWorldSubsystem { GENERATED_BODY() public: /** */ UFUNCTION(BlueprintCallable, Category = "ContextEffects") void SpawnContextEffects( const AActor* SpawningActor , USceneComponent* AttachToComponent , const FName AttachPoint , const FVector LocationOffset , const FRotator RotationOffset , FGameplayTag Effect , FGameplayTagContainer Contexts , TArray& AudioOut , TArray& NiagaraOut , FVector VFXScale = FVector(1) , float AudioVolume = 1 , float AudioPitch = 1); /** */ UFUNCTION(BlueprintCallable, Category = "ContextEffects") bool GetContextFromSurfaceType(TEnumAsByte PhysicalSurface, FGameplayTag& Context); /** */ UFUNCTION(BlueprintCallable, Category = "ContextEffects") void LoadAndAddContextEffectsLibraries(AActor* OwningActor, TSet> ContextEffectsLibraries); /** */ UFUNCTION(BlueprintCallable, Category = "ContextEffects") void UnloadAndRemoveContextEffectsLibraries(AActor* OwningActor); private: UPROPERTY(Transient) TMap, TObjectPtr> ActiveActorEffectsMap; };