81 lines
2.3 KiB
C++
81 lines
2.3 KiB
C++
// 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;
|
|
};
|