LEAP Documentation 40220
Documentation for the LEAP project
AfflictionInstance.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios Inc 2018. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Components/ActorComponent.h"
7#include "AfflictionInstance.generated.h"
8
11
12UENUM(BlueprintType)
13enum class EApplicationType : uint8
14{
15 Stacking = 0,
16 Override = 1,
18};
19
20DECLARE_DYNAMIC_MULTICAST_DELEGATE(FAfflictionEventSignature);
21
22UCLASS(Blueprintable, ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
23class PROJECTX_API UAfflictionInstance : public UActorComponent
24{
25 GENERATED_UCLASS_BODY()
26
27public:
28 /*The time that the affliction will last for*/
29 UPROPERTY(EditDefaultsOnly, Category = Affliction)
30 float AfflictionDuration = 0.0f;
31 /*The amount this affliction will affect stats*/
32 UPROPERTY(EditDefaultsOnly, Category = Affliction)
34 /*Additional afflicitons triggered by this affliction, need to be careful here to not create endless loops*/
35 UPROPERTY(EditDefaultsOnly, Category = Affliction)
36 TArray<TSubclassOf<UAfflictionInstance>> ChildAfflictions;
37 /*Priority used to determine most relevant affliction if multiple*/
38 UPROPERTY(EditDefaultsOnly, Category = "Affliction")
39 int32 Priority = 0;
40 /*Is this affliction a perk,Perks are never removed*/
41 UPROPERTY(EditDefaultsOnly, Category = "Affliction")
42 bool bPerk = false;
43
44 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
45
46 //returns false if initialization failed (already initialized)
47 UFUNCTION()
48 virtual bool Initialize(UAfflictionComponent* OwningComponent, AActor* AfflictionInstigator = NULL);
49 UFUNCTION(BlueprintImplementableEvent, Category = Affliction)
50 void OnInitialization();
51
52 UFUNCTION()
53 virtual void Start();
54
55 UFUNCTION(BlueprintPure)
56 FORCEINLINE EApplicationType GetApplicationType() { return Type; }
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; }
65
66 UFUNCTION(BlueprintCallable, Category = "Affliction")
67 UAfflictionComponent* GetAfflictionComponent() const { return AfflictionComponent; }
68
69 UFUNCTION(BlueprintCallable, Category = "Affliction")
70 AActor* GetInstigator() const { return Instigator; }
71
72 UFUNCTION(BlueprintCallable, Category = "Affliction")
73 AProjectXCharacter* GetOwningCharacter() const { return OwningCharacter; }
74 UFUNCTION(BlueprintCallable, Category = "Affliction")
75 AProjectXVehicle* GetOwningVehicle() const { return OwningVehicle; }
76 UFUNCTION(BlueprintCallable, Category = Affliction)
77 FORCEINLINE FHitResult GetInitializationHitInfo() const { return InitializationHitInfo; }
78 void SetInitializationHitInfo(FHitResult HitResult) { InitializationHitInfo = HitResult; MarkComponentDirtyForReplication(); }
79
80 void ResetDurationTimer();
81 void UpdateEffectDelayDuration(float NewEffectDelay) { EffectTriggerDelayDuration = NewEffectDelay; }
82 const TArray<TSubclassOf<UAfflictionInstance>>& GetChildAfflictions() { return ChildAfflictions; }
83
84 UFUNCTION(BlueprintNativeEvent, Category = "Affliction")
85 float TakeDamage(float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser);
86
87 void ClearAffliction();
88
89
90 //Returns false if this affliction affects others' ability to see them
91 UFUNCTION(BlueprintNativeEvent, Category = "Affliction")
92 bool IsVisible() const;
93
94 UPROPERTY(BlueprintAssignable, Category = "Affliction")
95 FAfflictionEventSignature OnAfflictionStart;
96 UPROPERTY(BlueprintAssignable, Category = "Affliction")
97 FAfflictionEventSignature OnAfflictionEnd;
98 UPROPERTY(BlueprintAssignable, Category = "Affliction")
99 FAfflictionEventSignature OnInitializationHitInfoReplicated;
100
101 static bool ValidOverride(const TWeakObjectPtr<UAfflictionInstance> Affliction, int32& HighestPriority, float& Time, EApplicationType& HighestApplicationLevel);
102
103 bool bCallAfflictionEndEvents = true;
104 bool bEffectActive = false;
105
106protected:
107 UFUNCTION()
108 virtual void End(bool bIgnoreApplyModifier = false);
109 UFUNCTION(BlueprintImplementableEvent, Category = Affliction, meta = (DisplayName="Start",ScriptName="Start"))
110 void K2_Start();
111 UFUNCTION(BlueprintImplementableEvent, Category = Affliction, meta = (DisplayName="End", ScriptName="End"))
112 void K2_End();
113 UFUNCTION(BlueprintImplementableEvent, Category = Affliction, meta = (DisplayName = "OnHitInfoInitialized", ScriptName = "OnHitInfoInitialized"))
114 void K2_HitInfoInitialized();
115 UFUNCTION(BlueprintImplementableEvent)
116 void K2_ApplyModifier();
117
118 void TriggerModifier();
119
120 virtual void ApplyModifier() {}
121 virtual void GetTotalModifier(const TArray<UAfflictionInstance*>& Afflictions) {}
122 UFUNCTION()
123 void OnRep_InitializationHitInfo();
124
125 UPROPERTY()
126 UAfflictionComponent* AfflictionComponent = NULL;
127 UPROPERTY(Replicated)
128 AActor* Instigator = NULL;
129 UPROPERTY()
130 AProjectXCharacter* OwningCharacter = NULL;
131 UPROPERTY()
132 AProjectXVehicle* OwningVehicle = NULL; //TODOLEAP: Refactor to Baseclass instead of having a Character and Vehicle
133 UPROPERTY()
134 bool bInitialized = false;
135 int Counter = 0;
136 float TimeStamp = 0;
137 FTimerHandle DurationHandle;
138 //The FHitResult information that was used to initialize this affliction, if any
139 UPROPERTY(ReplicatedUsing = OnRep_InitializationHitInfo)
140 FHitResult InitializationHitInfo = FHitResult();
141
142 FTimerHandle EffectTriggerDelayHandle;
143 /* delay before the affliction takes affect*/
144 UPROPERTY(EditDefaultsOnly)
145 float EffectTriggerDelayDuration;
146};
EApplicationType
Definition: AfflictionInstance.h:14
@ OverrideAndClearOtherAfflictions
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FAfflictionEventSignature)
Definition: ProjectXCharacter.h:128
Definition: ProjectXVehicle.h:56