RealtimeStyleTransferRuntime/Source/LyraGame/AbilitySystem/LyraGlobalAbilitySystem.h

81 lines
2.3 KiB
C
Raw Normal View History

2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/WorldSubsystem.h"
#include "AbilitySystemInterface.h"
#include "GameplayTagContainer.h"
#include "GameplayAbilitySpec.h"
#include "GameplayEffectTypes.h"
#include "LyraGlobalAbilitySystem.generated.h"
class ULyraAbilitySystemComponent;
class UAbilitySystemComponent;
class UGameplayEffect;
class UGameplayAbility;
USTRUCT()
struct FGlobalAppliedAbilityList
{
GENERATED_BODY()
UPROPERTY()
TMap<ULyraAbilitySystemComponent*, FGameplayAbilitySpecHandle> Handles;
void AddToASC(TSubclassOf<UGameplayAbility> Ability, ULyraAbilitySystemComponent* ASC);
void RemoveFromASC(ULyraAbilitySystemComponent* ASC);
void RemoveFromAll();
};
USTRUCT()
struct FGlobalAppliedEffectList
{
GENERATED_BODY()
UPROPERTY()
TMap<ULyraAbilitySystemComponent*, FActiveGameplayEffectHandle> Handles;
void AddToASC(TSubclassOf<UGameplayEffect> Effect, ULyraAbilitySystemComponent* ASC);
void RemoveFromASC(ULyraAbilitySystemComponent* ASC);
void RemoveFromAll();
};
UCLASS()
class ULyraGlobalAbilitySystem : public UWorldSubsystem
{
GENERATED_BODY()
public:
ULyraGlobalAbilitySystem();
UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category="Lyra")
void ApplyAbilityToAll(TSubclassOf<UGameplayAbility> Ability);
UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category="Lyra")
void ApplyEffectToAll(TSubclassOf<UGameplayEffect> Effect);
UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = "Lyra")
void RemoveAbilityFromAll(TSubclassOf<UGameplayAbility> Ability);
UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = "Lyra")
void RemoveEffectFromAll(TSubclassOf<UGameplayEffect> Effect);
/** Register an ASC with global system and apply any active global effects/abilities. */
void RegisterASC(ULyraAbilitySystemComponent* ASC);
/** Removes an ASC from the global system, along with any active global effects/abilities. */
void UnregisterASC(ULyraAbilitySystemComponent* ASC);
private:
UPROPERTY()
TMap<TSubclassOf<UGameplayAbility>, FGlobalAppliedAbilityList> AppliedAbilities;
UPROPERTY()
TMap<TSubclassOf<UGameplayEffect>, FGlobalAppliedEffectList> AppliedEffects;
UPROPERTY()
TArray<ULyraAbilitySystemComponent*> RegisteredASCs;
};