5#include "CoreMinimal.h"
7#include "Components/ActorComponent.h"
8#include "GameFramework/Controller.h"
9#include "AfflictionComponent.generated.h"
13UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
14class PROJECTX_API UAfflictionComponent :
public UActorComponent
16 GENERATED_UCLASS_BODY()
18 virtual
void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
21 virtual
float TakeDamage(
float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser);
26 T* AddAffliction(const TSubclassOf<UAfflictionInstance> AfflictionClass, AActor* Instigator,
bool bDeferInitialization = false)
28 return Cast<T>(AddAffliction(AfflictionClass, Instigator, bDeferInitialization));
32 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = Affliction, meta = (DefaultToSelf = Instigator))
33 virtual UAfflictionInstance* AddAffliction(
const TSubclassOf<UAfflictionInstance> AfflictionClass, AActor* Instigator,
bool bDeferInitialization =
false);
35 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = Affliction, meta = (DefaultToSelf = Instigator))
36 virtual void InitializeAffliction(UAfflictionInstance*
const Affliction, AActor*
const Instigator);
38 UFUNCTION(BlueprintCallable, Category = Affliction)
39 virtual bool HasAffliction(
const TSubclassOf<UAfflictionInstance> AfflictionClass, AActor*
const Instigator =
nullptr)
const;
41 UFUNCTION(BlueprintCallable, Category = Affliction)
42 virtual int32 GetNumAfflictions(
const TSubclassOf<UAfflictionInstance> AfflictionClass, AActor*
const Instigator =
nullptr)
const;
44 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = Affliction)
45 virtual void ResetTimersOnAfflictionsOfType(
const TSubclassOf<UAfflictionInstance> AfflictionClass,
const AActor* Instigator =
nullptr);
47 UFUNCTION(BlueprintCallable, Category = Affliction)
48 bool RemoveAfflictionbyType(
const TSubclassOf<UAfflictionInstance> AfflictionClass, AActor* Instigator = NULL);
49 UFUNCTION(BlueprintCallable, Category = Affliction)
50 void RemoveAffliction(UAfflictionInstance* Affliction)
const;
52 UFUNCTION(BlueprintCallable, Category = Affliction)
53 void RemoveAfflictionsByType(
const TSubclassOf<UAfflictionInstance> AfflictionClass,
const AActor* Instigator = NULL,
bool bCallAfflictionEndEvents =
true);
56 void RemoveAfflictionsByType(
const TSubclassOf<UAfflictionInstance> AfflictionClass,
const TArray <TWeakObjectPtr<UAfflictionInstance>>& IgnoredAfflictions,
const AActor* Instigator = NULL,
bool bCallAfflictionEndEvents =
true);
57 void GetAfflictionsByType(
const TSubclassOf<UAfflictionInstance> AfflictionClass, TArray<TWeakObjectPtr<UAfflictionInstance>>& FoundAfflictions,
const AActor* Instigator = NULL)
const;
58 bool OnAfflictionDestroyed(UAfflictionInstance* Affliction);
60 UPROPERTY(BlueprintAssignable)
61 FAfflictionsUpdatedSignature AfflictionAddedEvent;
62 UPROPERTY(BlueprintAssignable)
63 FAfflictionsUpdatedSignature AfflictionRemovedEvent;
68 virtual
void OnRep_AfflictionList();
70 UFUNCTION(Client, Reliable)
71 void Client_RemoveAfflictionsByType(TSubclassOf<UAfflictionInstance> AfflictionClass, const TArray <TWeakObjectPtr<UAfflictionInstance>>& IgnoredAfflictions, const AActor* Instigator = NULL,
bool bCallAfflictionEndEvents = true);
75 UPROPERTY(ReplicatedUsing = OnRep_AfflictionList)
76 TArray<TWeakObjectPtr<UAfflictionInstance>> AfflictionList;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FAfflictionsUpdatedSignature, UAfflictionInstance *, Affliction)