5#include "CoreMinimal.h"
6#include "Components/ActorComponent.h"
7#include "AfflictionInstance.generated.h"
22UCLASS(Blueprintable, ClassGroup=(
Custom), meta=(BlueprintSpawnableComponent) )
23class PROJECTX_API UAfflictionInstance :
public UActorComponent
25 GENERATED_UCLASS_BODY()
29 UPROPERTY(EditDefaultsOnly, Category = Affliction)
30 float AfflictionDuration = 0.0f;
32 UPROPERTY(EditDefaultsOnly, Category = Affliction)
35 UPROPERTY(EditDefaultsOnly, Category = Affliction)
36 TArray<TSubclassOf<UAfflictionInstance>> ChildAfflictions;
38 UPROPERTY(EditDefaultsOnly, Category = "Affliction")
41 UPROPERTY(EditDefaultsOnly, Category = "Affliction")
44 virtual
void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
48 virtual
bool Initialize(UAfflictionComponent* OwningComponent, AActor* AfflictionInstigator = NULL);
49 UFUNCTION(BlueprintImplementableEvent, Category = Affliction)
50 void OnInitialization();
55 UFUNCTION(BlueprintPure)
57 UFUNCTION(BlueprintPure)
58 FORCEINLINE
float GetEffectDelayDuration()
const {
return EffectTriggerDelayDuration; }
59 UFUNCTION(BlueprintPure)
60 FORCEINLINE int32 GetPriority() {
return Priority; }
61 UFUNCTION(BlueprintPure)
62 FORCEINLINE
bool GetIsEffectActive()
const {
return bEffectActive; }
63 UFUNCTION(BlueprintPure)
64 FORCEINLINE
float GetTimeStamp() {
return TimeStamp; }
66 UFUNCTION(BlueprintCallable, Category =
"Affliction")
67 UAfflictionComponent* GetAfflictionComponent()
const {
return AfflictionComponent; }
69 UFUNCTION(BlueprintCallable, Category =
"Affliction")
70 AActor* GetInstigator()
const {
return Instigator; }
72 UFUNCTION(BlueprintCallable, Category =
"Affliction")
74 UFUNCTION(BlueprintCallable, Category =
"Affliction")
76 UFUNCTION(BlueprintCallable, Category = Affliction)
77 FORCEINLINE FHitResult GetInitializationHitInfo()
const {
return InitializationHitInfo; }
78 void SetInitializationHitInfo(FHitResult HitResult) { InitializationHitInfo = HitResult; MarkComponentDirtyForReplication(); }
80 void ResetDurationTimer();
81 void UpdateEffectDelayDuration(
float NewEffectDelay) { EffectTriggerDelayDuration = NewEffectDelay; }
82 const TArray<TSubclassOf<UAfflictionInstance>>& GetChildAfflictions() {
return ChildAfflictions; }
84 UFUNCTION(BlueprintNativeEvent, Category =
"Affliction")
85 float TakeDamage(
float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser);
87 void ClearAffliction();
91 UFUNCTION(BlueprintNativeEvent, Category = "Affliction")
92 bool IsVisible() const;
94 UPROPERTY(BlueprintAssignable, Category = "Affliction")
95 FAfflictionEventSignature OnAfflictionStart;
96 UPROPERTY(BlueprintAssignable, Category = "Affliction")
97 FAfflictionEventSignature OnAfflictionEnd;
98 UPROPERTY(BlueprintAssignable, Category = "Affliction")
99 FAfflictionEventSignature OnInitializationHitInfoReplicated;
101 static
bool ValidOverride(const TWeakObjectPtr<UAfflictionInstance> Affliction, int32& HighestPriority,
float& Time,
EApplicationType& HighestApplicationLevel);
103 bool bCallAfflictionEndEvents = true;
104 bool bEffectActive = false;
108 virtual
void End(
bool bIgnoreApplyModifier = false);
109 UFUNCTION(BlueprintImplementableEvent, Category = Affliction, meta = (DisplayName="Start",ScriptName="Start"))
111 UFUNCTION(BlueprintImplementableEvent, Category = Affliction, meta = (DisplayName="End", ScriptName="End"))
113 UFUNCTION(BlueprintImplementableEvent, Category = Affliction, meta = (DisplayName = "OnHitInfoInitialized", ScriptName = "OnHitInfoInitialized"))
114 void K2_HitInfoInitialized();
115 UFUNCTION(BlueprintImplementableEvent)
116 void K2_ApplyModifier();
118 void TriggerModifier();
120 virtual
void ApplyModifier() {}
121 virtual void GetTotalModifier(
const TArray<UAfflictionInstance*>& Afflictions) {}
123 void OnRep_InitializationHitInfo();
126 UAfflictionComponent* AfflictionComponent = NULL;
127 UPROPERTY(Replicated)
128 AActor* Instigator = NULL;
134 bool bInitialized = false;
137 FTimerHandle DurationHandle;
139 UPROPERTY(ReplicatedUsing = OnRep_InitializationHitInfo)
140 FHitResult InitializationHitInfo = FHitResult();
142 FTimerHandle EffectTriggerDelayHandle;
144 UPROPERTY(EditDefaultsOnly)
145 float EffectTriggerDelayDuration;
EApplicationType
Definition: AfflictionInstance.h:14
@ OverrideAndClearOtherAfflictions
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FAfflictionEventSignature)
Definition: ProjectXCharacter.h:128
Definition: ProjectXVehicle.h:56