LEAP Documentation 40220
Documentation for the LEAP project
ProjectXCharacter.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios 2017. All Rights Reserved.
2
3#pragma once
4
5#include "ProjectX.h"
6#include "GameFramework/Character.h"
8#include "OwnedInterface.h"
9#include "HealthInterface.h"
10#include "ReactsToMatchEvents.h"
13#include "SpottableInterface.h"
14#include "TeamInterface.h"
15#include "TrackableInterface.h"
16#include "KillCamInterface.h"
17#include "PlayerStats.h"
18#include "GameFramework/DamageType.h"
19#include "PlayerStructs.h"
20#include "ObjectInfoInterface.h"
21#include "ProjectXDamageType.h"
22#include "CosmeticAssetBase.h"
23#include "ProjectXCharacter.generated.h"
24
25#define WEAPON_PIVOT_OFFSET FVector(-50.0f, 0.0f, 0.0f)
26
27class UAmbianceComponent;
29class UWeaponComponent;
30class UInteractionComponent;
31class UInventoryComponent;
32class USpringArmComponent;
33class UCameraComponent;
35class UInputComponent;
36class UAudioComponent;
38class USkeletalMeshComponent;
39class UAfflictionComponent;
40class UAfflictionInstance;
41class UWeaponInstance;
43class UVehicleSeatComponent;
45class ADecalActor;
47class UHookshotComponent;
48class UJetPackComponent;
49
50USTRUCT(Blueprintable)
52{
53 GENERATED_USTRUCT_BODY()
54
55 /* The type of damage to a configure resistances for */
56 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Resistance)
57 TSubclassOf<UDamageType> DamageType = nullptr;
58 /* Value between 0 and 1 where 1 is immune to this damage type and 0 is fully damaged */
59 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Resistance, meta = (ClampMin = 0.0, ClampMax = 1.0))
60 float ResistancePct = 1.0f;
61};
62
63UENUM(BlueprintType)
64enum class ECharacterStat : uint8
65{
66 Health = 0,
67 Stamina = 1,
68 Shields = 2,
69 None = 255
70};
71
72UENUM(BlueprintType)
73enum class EInputDirection : uint8
74{
75 Forward = 0,
76 Right = 1,
77 Backwards = 2,
78 Left = 3
79};
80
81USTRUCT(BlueprintType)
83{
84 GENERATED_USTRUCT_BODY()
85 UPROPERTY(EditDefaultsOnly)
86 TArray<TSubclassOf<UWeaponInstance>> WeaponOptions;
87};
88
89USTRUCT(BlueprintType)
91{
92 GENERATED_USTRUCT_BODY()
93 UPROPERTY(EditDefaultsOnly)
94 TMap<EEquipSlot,FWeaponSlot> Weapons;
95};
96
97USTRUCT(BlueprintType)
99{
100 GENERATED_USTRUCT_BODY()
101 UPROPERTY()
102 bool Value = true;
103 UPROPERTY()
104 float Time = 0.0f;
105};
106
108DECLARE_DYNAMIC_MULTICAST_DELEGATE(FInputDisabledSignature);
109DECLARE_DYNAMIC_MULTICAST_DELEGATE(FNotEnoughEnergySignature);
110DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnFootstepSignature, class UPhysicalMaterial*, PhysicsMaterial);
111DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FLocomotionChangeSignature, bool, bToggle);
112DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FStaminaChangedSignature, float, Stamina);
114DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FPlayerStateChangedSignature, APlayerState*, PlayerState);
115DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDashEventSignature, int32, DashCharges);
116DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FVisibilityChangedSignature, bool, bVisible, float, VisibleTimeStamp);
117DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FCharacterDamagedAt, FVector, Location, AActor*, DamageCauser);
118DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FStatOverTimeModificationAdded, const ECharacterStat, StatType, const float, StatDelta, const float, Time);
119DECLARE_DYNAMIC_MULTICAST_DELEGATE_FiveParams(FHitNotificationSignature, float, Damage, bool, bHeadshot, TSubclassOf<UDamageType>, DamageType, AActor*, DamagingActor, float, RadialDamageLerp);
120DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FVehicleChangedSignature, class AProjectXCharacter*, Driver, class AProjectXVehicle*, CurrentVehicle, class AProjectXVehicle*, PreviousVehicle);
121DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FCharacterPlayerStateChangedSignature, APlayerState*, PlayerState, AProjectXCharacter*, Character);
122DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FDashEventRechargeSignature, float, RechargeStartTime, float, Duration, int32, DashRechargingValue);
123DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FMutateDamageSignature, float&, Damage, struct FDamageEvent const&, DamageEvent, AController*, EventInstigator, AActor*, DamageCauser);
124
125
126UCLASS(config=Game)
128 {
129 GENERATED_UCLASS_BODY()
130
131public:
132 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Class ID", ScriptName = "GetClassID"))
133 static FString StaticGetClassID(TSubclassOf<AProjectXCharacter> Class);
134 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Class Name", ScriptName = "GetClassName"))
135 static FText StaticGetClassName(TSubclassOf<AProjectXCharacter> Class);
136 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Weapon List", ScriptName = "GetWeaponList"))
137 static TArray<TSubclassOf<UWeaponInstance>> StaticGetWeaponList(TSubclassOf<AProjectXCharacter> Class,EEquipSlot Slot);
138 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Max Health", ScriptName = "GetMaxHealth"))
139 static int32 StaticGetMaxHealth(TSubclassOf<AProjectXCharacter> Class);
140 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Max Shields", ScriptName = "GetMaxShields"))
141 static int32 StaticGetMaxShields(TSubclassOf<AProjectXCharacter> Class);
142 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Ground Speed", ScriptName = "GetGroundSpeed"))
143 static float StaticGetGroundSpeed(TSubclassOf<AProjectXCharacter> Class);
144 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Max Jumps", ScriptName = "GetMaxJumps"))
145 static int32 StaticGetMaxJumps(TSubclassOf<AProjectXCharacter> Class);
146 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Icon", ScriptName = "GetIcon"))
147 static TSoftObjectPtr<UMaterialInstance> StaticGetClassIcon(TSubclassOf<AProjectXCharacter> Class);
148 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "Get Cosmetic Component", ScriptName = "GetCosmeticComponent"))
149 static UCosmeticsComponent* StaticGetDefaultCosmeticComponent(TSubclassOf<AProjectXCharacter> Class);
150 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "GetNumberOfPerkSlots", ScriptName = "GetNumberOfPerkSlots"))
151 static uint8 StaticGetNumberOfPerksSlots(TSubclassOf<AProjectXCharacter> Class) { return (Class && Class->GetDefaultObject<AProjectXCharacter>()) ? Class->GetDefaultObject<AProjectXCharacter>()->GetPerkSlots().Num() : 0; }
152 UFUNCTION(BlueprintPure, Category = "Player Class", meta = (DisplayName = "GetPerkSlots", ScriptName = "GetPerkSlots"))
153 static TArray<EPerkType> StaticGetPerkSlots(TSubclassOf<AProjectXCharacter> Class) { return (Class && Class->GetDefaultObject<AProjectXCharacter>()) ? Class->GetDefaultObject<AProjectXCharacter>()->GetPerkSlots() :TArray<EPerkType>(); }
154 UFUNCTION(BlueprintPure, Category = Character)
155 FORCEINLINE UAmbianceComponent* GetAmbianceComponent() const { return AmbianceComponent; }
156 UFUNCTION(BlueprintPure, Category = Character)
157 FORCEINLINE UCosmeticsComponent* GetCosmeticsComponent() const { return CosmeticsComponent; }
158 UFUNCTION(BlueprintPure, Category = Character)
159 FORCEINLINE UWeaponComponent* GetWeaponComponent() const { return WeaponComponent; }
160 UFUNCTION(BlueprintPure, Category = Character)
161 FORCEINLINE UInteractionComponent* GetInteractionComponent() const { return InteractionComponent; }
162 UFUNCTION(BlueprintPure, Category = Character)
163 FORCEINLINE USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
164 UFUNCTION(BlueprintPure, Category = Character)
165 FORCEINLINE USceneComponent* GetFirstPersonFollowComponent() const { return FirstPersonFollowComponent; }
166 UFUNCTION(BlueprintPure, Category = Character)
167 FORCEINLINE UCameraComponent* GetFirstPersonCamera() const { return FirstPersonCameraComponent; }
168 UFUNCTION(BlueprintPure, Category = Character)
169 FORCEINLINE UCameraComponent* GetFollowCamera() const { return FollowCamera; }
170 UFUNCTION(BlueprintPure, Category = Character)
171 FORCEINLINE UHookshotComponent* GetHookshotComponent() const { return HookShotComponent; }
172 UFUNCTION(BlueprintPure, Category = Character)
173 FORCEINLINE float GetRunMultiplier() const { return RunSpeedMultiplier; }
174 UFUNCTION(BlueprintPure, Category = Character)
175 FORCEINLINE float GetCrouchedRunMultiplier() const { return RunCrouchSpeedMultiplier; }
176 UFUNCTION(BlueprintPure, Category = Character)
177 FORCEINLINE bool IsFastFalling() const { return bIsFastFalling; }
178 UFUNCTION(BlueprintPure, Category = Character)
179 FORCEINLINE bool IsMovingForward() const { return !GetVelocity().IsZero() && (GetVelocity().GetSafeNormal2D() | GetActorForwardVector()) > -0.1; }
180 UFUNCTION(BlueprintPure, Category = Character)
181 FORCEINLINE bool IsMoving() const { return !GetVelocity().IsZero(); }
182 UFUNCTION(BlueprintPure, Category = Character)
183 FORCEINLINE bool CanRagdoll() const { return bCanRagdoll; }
184 UFUNCTION(BlueprintPure, Category = Character)
185 FORCEINLINE class UDamageHistoryComponent* GetDamageHistoryComponent() const { return DamageHistoryComponent; }
186 UFUNCTION(BlueprintPure, Category = Character)
187 FORCEINLINE float GetStamina() const { return Stamina; }
188 UFUNCTION(BlueprintPure, Category = "Movement")
189 FORCEINLINE bool CanWaterRun() const { return GetStamina() > 0.0f; }
190 UFUNCTION(BlueprintPure, Category = Character)
191 FORCEINLINE bool IsBoosting() const { return bIsBoosting; }
192 UFUNCTION(BlueprintPure, Category = Character)
193 FORCEINLINE bool IsHoldingBreath() const { return bIsHoldingBreath; }
194 UFUNCTION(BlueprintPure,Category = Character)
195 FORCEINLINE float GetVehicleSpeedModifier() const{return VehicleSpeedModifier;}
196 UFUNCTION(BlueprintPure, Category = Character)
197 FORCEINLINE float GetTicketPickupMultiplier() const{return TicketPickupMultiplier;}
198 UFUNCTION(BlueprintCallable)
199 void UpdateVehicleSpeedModifier(float NewVehicleSpeedModifier) { VehicleSpeedModifier = NewVehicleSpeedModifier; }
200 UFUNCTION(BlueprintPure,Category = Character)
201 const TArray<EPerkType>& GetPerkSlots() const { return PerkSlots; }
202 UFUNCTION(BlueprintPure, Category = Character)
203 float GetJumpStaminaCost() const;
204 UFUNCTION(BlueprintCallable, Category = Character)
205 virtual bool IsInVehicle() const;
206 UFUNCTION(BlueprintCallable, Category = Character)
207 virtual bool IsInPersonalVehicle() const;
208 UFUNCTION(BlueprintCallable, Category = Character)
209 virtual bool IsDriving() const;
210 UFUNCTION(BlueprintCallable, Category = Loadout)
211 TSubclassOf<APickupReviveBeacon> GetReviveBeaconClass() const {return ReviveBeaconClass; }
212 UFUNCTION(BlueprintCallable, Category = Character)
213 FORCEINLINE AProjectXVehicle* GetVehicle() const { return Vehicle.Get(); }
214 FORCEINLINE AProjectXVehicle* GetPreviousVehicle() const { return PreviousVehicle.Get(); }
215 FORCEINLINE FDateTime GetTimeWhenLeftPreviousVehicle() const { return TimeWhenLeftPreviousVehicle; }
216 UFUNCTION(BlueprintPure)
217 AActor* GetActorUnderControl() const { return ActorUnderControl.IsValid() ? ActorUnderControl.Get() : const_cast<AProjectXCharacter*>(this); }
218 FORCEINLINE void SetActorUnderControl(AActor* NewActor) { ActorUnderControl = NewActor; }
219 UFUNCTION(BlueprintCallable, Category = Character)
220 virtual bool CanEnterVehicle(const AProjectXVehicle* InVehicle) const;
221 UFUNCTION(BlueprintCallable, Category = Character)
222 virtual void ResetPlayerMovement();
223 virtual float GetTimeSinceLastDamage() const override;
224 virtual const FText& GetObjectName() const;
225 virtual const FString GetOwnerName() const;
226 virtual const FText& GetObjectDescription() const;
227 UFUNCTION(BlueprintPure, Category = Character)
228 bool IsRunning() const;
229 UFUNCTION(BlueprintPure, Category = "Character Movement (Acceleration)")
230 bool IsProvidingInput(const EInputDirection Direction) const;
231 UFUNCTION(BlueprintPure, Category = Character)
232 UProjectXCharacterMovement* GetProjectXCharacterMovement() const;
233 UFUNCTION(BlueprintPure, Category = Character)
234 AProjectXPlayerController* GetPlayerController() const;
235 UFUNCTION(BlueprintPure, Category = Character)
236 bool IsAllowedToJump() const { return bCanJump; }
237 UFUNCTION(BlueprintPure, Category = Character)
238 bool IsAllowedToStealth() const { return bCanStealth; }
239 UFUNCTION(BlueprintPure, Category = "Player Class")
240 const FText& GetPlayerClassName() const { return ClassName; }
241 UFUNCTION(BlueprintPure, Category = "Player Class")
242 const FString& GetClassID() const { return ClassID; }
243 UFUNCTION(BlueprintCallable,Category = "PlayerClass")
244 void SetClassID(const FString& NewID) { ClassID = NewID; }
245 UFUNCTION(BlueprintPure, Category = "PlayerClass")
246 bool CanDash() const { return DashCharges > 0 && bCanMove && bDashEnabled; }
247 UFUNCTION(BlueprintPure, Category = "PlayerClass")
248 int32 GetMaxDashes() const {return MaxNumberOfDashCharges;}
249 UFUNCTION(BlueprintCallable)
250 bool IsDeferingDashChargesInAir() const{return bDeferDashChargesInAIr; }
251 virtual void SetDeferDashChargesInAir(bool bNewDeferDashChargesInAir);
252 UFUNCTION(BlueprintPure, Category = Character)
253 bool ShouldResetDashesOnKill() const { return bResetDashesOnKill; }
254 void UpdateResetDashesOnKill(bool bNewResetDashOnKill) { bResetDashesOnKill = bNewResetDashOnKill; }
255 void ModifyMaxDashCharges();
256 UFUNCTION(BlueprintPure, Category = Character)
257 bool IsPlayingTauntMontage() const { return bIsPlayingTauntMontage; }
258 UFUNCTION(BlueprintPure,Category = "PlayerClass")
259 void GetEquippedWeaponList(AProjectXPlayerState* const OwningPlayerState, TMap<EEquipSlot,TSubclassOf<UWeaponInstance>>& FoundEquippedWeapons) const;
260 UFUNCTION(BlueprintPure,Category = Character)
261 float GetHealthReturnOnExpEvent(EXPEventType Event) const {return HealthOnExpEvent.Contains(Event) ? HealthOnExpEvent[Event] : 0.0f; }
262 void UpdateHealthReturnOnExpEvent(EXPEventType Event, float NewReturnValue);
263 UFUNCTION(BlueprintPure, Category = "Player Class")
264 TSoftObjectPtr<UMaterialInstance> GetIcon() const { return ClassIcon; }
265 UFUNCTION(BlueprintPure, Category = Character)
266 virtual bool IsValidTarget() const;
267 virtual bool IsCloaked() const override { return !Visible.Value; }
268 UFUNCTION(BlueprintPure, Category = Character)
269 virtual float GetVisibilityChangedTimeStamp() const { return Visible.Time; }
270 UFUNCTION(BlueprintPure, Category = Character)
271 virtual float GetTimeSinceLostGroundedness() const;
272 UFUNCTION(BlueprintPure, Category = "Player Class")
273 const TArray<TSubclassOf<UWeaponInstance>>& GetWeaponList(EEquipSlot Slot) const { return PlayerInventory.Weapons.Contains(Slot) ? PlayerInventory.Weapons[Slot].WeaponOptions : WeaponListStatic;}
274 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = Gameplay)
275 void ModifyStamina(const float StaminaDelta);
276 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = Gameplay)
277 void ModifyStatOverTime(const ECharacterStat StatType, const float StatDelta, const float Time);
278 UFUNCTION(BlueprintCallable)
279 void ToggleView(bool bIsFirstPerson);
280 UFUNCTION(BlueprintCallable)
281 void ToggleMeshes(bool bIsFirstPerson);
282 UFUNCTION(BlueprintCallable)
283 virtual bool IsLocallyPlayerControlled() const;
284 TArray<TSubclassOf<class ADeployable>> GetAllDeployableClasses(AProjectXPlayerState* const OwningPlayerState = NULL) const;
285 void UpdateTicketPickupMultiplier(float NewMultiplier) { TicketPickupMultiplier = NewMultiplier; }
286 UFUNCTION()
287 virtual TArray<UMeshComponent*> GetKillCamMeshes() const override;
288 int GetMaxUltimateCharge() const { return MaxUltimateCharge; }
289 virtual void PostInitializeComponents() override;
290 virtual bool IsLocallyControlled() const override;
291 bool IsLocallyBotControlled();
292 virtual void EnableInput(APlayerController* PlayerController) override;
293 virtual void DisableInput(APlayerController* PlayerController) override;
294 virtual void SetPlayerState(APlayerState* NewPlayerState) override;
295 virtual APlayerState* GetOwnedPlayerState() const override;
296 UFUNCTION(BlueprintCallable)
297 virtual void SetOwnedPlayerState(APlayerState* NewOwnedPlayerState) { OwningPlayerState = NewOwnedPlayerState; }
298 UFUNCTION()
299 virtual int32 GetTeam() const override;
300 virtual int32 SetTeam(int32 NewTeam) override;
301 virtual float TakeDamage(float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
302 virtual void StartJumping();
303 virtual void SetPlayerDefaults() override;
304 virtual void SetInsideVolume() override;
305 virtual void SetOutsideVolume() override;
306 virtual bool IsInside_Implementation() const override;
307 virtual bool WasInside_Implementation() const override;
308 virtual void MatchEnded() override;
309 virtual void Landed(const FHitResult& Hit) override;
310 virtual void LaunchCharacter(FVector LaunchVelocity, bool bXYOverride, bool bZOverride) override;
311 UFUNCTION()
312 virtual void MenuToggled(UAdvancedUserWidget* Widget, bool bToggle);
313 virtual void Die(float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser, const FHitResult& HitResult, APlayerState* InstigatorPlayerState);
314 virtual UAfflictionComponent* GetAfflictionComponent() const override { return AfflictionComponent; }
315 virtual bool CanSpawnPlayer(const AProjectXPlayerState* Instigator) const override;
316 virtual float GetSpawnScoreForInstigator(const AActor* const QueryInstigator, FVector& TargetLocation, bool bUseDistanceToTargetLocation = false) const override;
317 virtual bool GetCanSpawnOnCombatTarget() const override;
318 virtual void UpdateCanSpawnOnCombatTarget(bool bNewInCombatSpawnTarget) { bCanSpawnInCombat = bNewInCombatSpawnTarget; }
319 virtual bool GetSpawnLocation(AProjectXPlayerState* SpawnInstigator, FTransform& Transform) const override;
320 virtual float GetShields() const override { return Shields; }
321 virtual float GetMaxShieldsWithOvercharge() const override { return MaxShieldsWithOvercharge; }
322 virtual void SetOvershield(float NewOvershield) override { MaxShieldsWithOvercharge = NewOvershield; }
323 virtual float GetMaxShields() const override { return MaxShields; }
324 virtual void SetShields(float InShields) override;
325 virtual void SetMaxHealth(float NewValue) override { MaxHealth = NewValue; OnRep_Health(GetHealth()); }
326 virtual void SetMaxShields(float NewValue) override { MaxShields = NewValue; OnRep_Shields(GetShields()); }
327 UFUNCTION(BlueprintCallable)
328 virtual void SetHealthRegenRate(float NewRate) override { HealthRegenRate = NewRate; }
329 virtual void SetShieldRegenRate(float NewRate) override { ShieldRegenRate = NewRate; }
330 virtual void SetShieldAndHealthRegenRate(float NewRate) override { CombinedRegenRate = NewRate; }
331 virtual bool IsArmored() const { return bArmored; }
332 virtual float GetHealth() const override { return Health; }
333 virtual float GetMaxHealth() const override { return MaxHealth; }
334 virtual float GetCachedMaxHealth() const override { return GetClass() && GetClass()->GetDefaultObject<AProjectXCharacter>() ? GetClass()->GetDefaultObject<AProjectXCharacter>()->MaxHealth : GetMaxHealth(); }
335 virtual float GetCachedMaxShields() const override { return GetClass() && GetClass()->GetDefaultObject<AProjectXCharacter>() ? GetClass()->GetDefaultObject<AProjectXCharacter>()->MaxShields : GetMaxShields(); }
336 virtual float GetCachedOvershield() const override { return GetClass() && GetClass()->GetDefaultObject<AProjectXCharacter>() ? GetClass()->GetDefaultObject<AProjectXCharacter>()->MaxShieldsWithOvercharge : GetOvershield(); }
337 virtual bool GetCachedUsesPassiveShieldRegen() const override { return GetClass() && GetClass()->GetDefaultObject<AProjectXCharacter>() ? GetClass()->GetDefaultObject<AProjectXCharacter>()->bUsePassiveShieldRegen : IsUsingPassiveShieldRegen(); }
338 virtual void SetHealth(const float NewHealth) override;
339 virtual void SetHealthPickupModifier(float NewModifier) override { HealthPickupModifier = NewModifier; }
340 virtual float GetHealthPickupModifier() const override { return HealthPickupModifier; }
341 virtual bool IsUsingPassiveShieldRegen() const override { return bUsePassiveShieldRegen; }
342 virtual bool CanModifyShieldsPastOverchargeMark() const override { return bCanOverchargeShields; }
343 virtual void SetCanModifyShieldsPastOverchargeMark(bool bNewCanOverchargeShields) { ModifyCanOverchargeShields(bNewCanOverchargeShields);}
344 virtual void SetCanUsePassiveShieldRegen(bool bNewUsePassiveShieldRegen) override;
345 virtual void SetDashCoolDown(float NewDashCoolDown);
346 virtual bool IsDead() const override { return bDead; }
347 virtual AKillCameraActor* SpawnKillCamActor() override;
348 virtual FRotator GetViewRotation() const override;
349 virtual void RecalculateBaseEyeHeight() override;
350 UFUNCTION(BlueprintCallable)
351 virtual void OnEnterVehicle(AProjectXVehicle* InVehicle, UVehicleSeatComponent* Seat);
352 virtual void OnExitVehicle();
353 UFUNCTION(BlueprintCallable, Category = "Vehicle")
354 virtual bool LeaveCurrentVehicle(bool bForce = false, bool bEject = false);
355 virtual void ProcessViewRotation(float DeltaTime, FRotator& OutViewRotation, FRotator& OutDeltaRot) { return; }
356 virtual bool CanBeLockedOn(const AActor* LockInstigator) const override;
357 virtual bool CanBeRepaired(const AActor* RepairInstigator) const override;
358 virtual float GetLockOnMaxDistance() override{ return MaxLockOnRange; }
359 virtual FVector2D GetLockOnScreenPercentage() override { return LockOnScreenPercentage; }
360 virtual FPawnLockOnSignature& GetLockOnTentativeStartDelegate() override { return OnLockOnTentativeStart; }
361 virtual FPawnLockOnSignature& GetLockOnTentativeEndDelegate() override { return OnLockOnTentativeEnd; }
362 virtual FPawnLockOnSignature& GetLockOnStartDelegate() override { return OnLockOnStart;}
363 virtual FPawnLockOnSignature& GetLockOnEndDelegate() override { return OnLockOnEnd;}
364 virtual FPawnIncomingProjectileSignature& GetIncomingProjectileStartDelegate() override { return OnIncomingProjectileStart;}
365 virtual FPawnIncomingProjectileSignature& GetIncomingProjectileEndDelegate() override { return OnIncomingProjectileEnd;}
366 virtual FPawnImminentMissileWarningSignature& GetImminentMissileWarningStartDelegate() override { return OnImminentMissileWarningStart; }
367 virtual FPawnImminentMissileWarningSignature& GetImminentMissileWarningEndDelegate() override { return OnImminentMissileWarningEnd; }
368 virtual FSoftBoundaryEvent& GetOnSoftBoundaryEnterEvent() override { return OnSoftBoundaryEnterEvent; }
369
370 virtual ESpotReply CanBeSpotted(const AActor* SpotInstigator, ESpotType SpotType) const override;
371 virtual FVector GetSpottingTraceOffset() const override { return GetActorLocation(); }
372 virtual TSoftObjectPtr<UTexture2D> GetMapIcon() const override { return CharacterMapIcon; }
373 virtual TSoftObjectPtr<UTexture2D> GetRadarIcon() const override { return CharacterRadarIcon; }
374 virtual TSoftObjectPtr<UTexture2D> GetHudIcon() const override { return CharacterHudIcon; }
375 virtual AActor* GetTrackableInterfaceActor() override { return this; }
376 virtual void BeginPassiveRegen();
377 virtual void StopPassiveRegen();
378 virtual void StartPassiveRegen();
379 virtual FVector GetMoveGoalOffset(const AActor* MovingActor) const override;
380
381 void ClearRecentlyConsumedStamina();
382 void ModifyStaminaRecoveryRate(float InRate);
383 void ModifyCanRecoverStamina(bool NewState) { bCanRecoverStamina = NewState; }
384 void ModifyCanJump(bool bNewCanJump);
385 void ModifyCanStealth(bool bNewCanStealth);
386 void ModifyCanMove(bool bNewCanMove);
387 void ModifyCanRotate(bool bNewCanRotate);
388 void ModifyCanPassiveRegen(bool bNewCanPassiveRegen) { bCanPassiveRegen = bNewCanPassiveRegen; }
389 void ModifyCanOverchargeShields(bool bNewCanOverchargeShields) { bCanOverchargeShields = bNewCanOverchargeShields; }
390
391 void UpdateVisibilityModifier(bool NewVisibility);
392 virtual void SetDamageResistance(float NewValue) override { DamageResistance = NewValue; }
393 virtual void SetExplosiveDamageResistance(float NewValue) override { DamageResistanceExplosive = NewValue; }
394 virtual float GetDamageResistance() const override { return DamageResistance; }
395 virtual float GetExplosiveDamageResistance() const override { return DamageResistanceExplosive; }
396
397 void StartCrouching();
398 void StopCrouching();
399 void StartRunning();
400 void StopRunning();
401 void StartBoosting();
402 void StopBoosting();
403 void StartHoldingBreath();
404 void StopHoldingBreath();
405 void StartAutoClamber();
406 void StopAutoClamber();
407 void AttachWeaponMeshToSocket(FName WeaponSocketName);
408 UFUNCTION(BlueprintCallable)
409 void PlayTaunt(uint8 TauntNumber);
410 void SetupEquipment();
411
412 UFUNCTION(Client, Reliable)
413 void Client_HitNotification(float Damage, bool bHeadshot, TSubclassOf<UDamageType> DamageType, AActor* DamagingActor, float RadialDamageLerp = 0.0f);
414 UFUNCTION(Server, Reliable, WithValidation)
415 void Server_Reliable_EnterVehicle(AProjectXVehicle* InVehicle, UVehicleSeatComponent* PreferredSeat);
416 UFUNCTION(Server, Reliable)
417 void Server_UpdateBaseEyeHeightCache(float InBaseEyeHeight);
418
419 UFUNCTION()
420 virtual void OnRep_YawPitch();
421 UFUNCTION()
422 virtual void OnRep_Health(float PreviousHealth);
423 UFUNCTION()
424 virtual void OnRep_Shields(float PreviousShields);
425 UFUNCTION()
426 void OnRep_Stamina();
427 UFUNCTION()
428 virtual void OnRep_CanRotate();
429 UFUNCTION()
430 virtual void OnRep_IsBoosting();
431 UFUNCTION()
432 virtual void OnRep_IsHoldingBreath();
433 UFUNCTION()
434 virtual void OnRep_IsDashing();
435 UFUNCTION()
436 virtual void OnRep_CanStealth();
437 UFUNCTION()
438 virtual void OnRep_Visibility();
439 virtual void OnRep_Controller() override;
440 virtual void OnRep_IsCrouched() override;
441 virtual void OnRep_PlayerState() override;
442
443 UFUNCTION(BlueprintImplementableEvent)
444 void StopCosmeticDash();
445 UFUNCTION(BlueprintImplementableEvent, Category = "KillCam")
446 FVector GetKillCamWidgetPlacementPivot() const;
447 UFUNCTION(BlueprintImplementableEvent, Category = "KillCam")
448 void HandleDeathEffects(const FDeathEffectInfo& DeathEffectInfo);
449
450 UFUNCTION(BlueprintImplementableEvent, Category = "Taunt")
451 void OnTauntToggled(bool bTauntOn);
452
453 /* NUmber of Dash Charges available to a character*/
454 UPROPERTY(EditDefaultsOnly, Category = "Movement")
455 int32 MaxNumberOfDashCharges = 2;
456 UPROPERTY(EditDefaultsOnly, Category = "Movement")
457 float StrafeMovementSpeedMultiplier = 0.5f;
458
459 UPROPERTY(BlueprintAssignable, Category = "Stat Events")
460 FStaminaChangedSignature OnStaminaChanged;
461 UPROPERTY(BlueprintAssignable, Category = "Stat Events")
462 FStatOverTimeModificationAdded OnStatModificationOverTimeStarted;
463 UPROPERTY(BlueprintAssignable, Category = "Locomotion Events")
464 FLocomotionChangeSignature OnCrouchChanged;
465 UPROPERTY(BlueprintAssignable, Category = "Locomotion Events")
466 FLocomotionChangeSignature OnBoostingChanged;
467 UPROPERTY(BlueprintAssignable, Category = "Locomotion Events")
468 FLocomotionChangeSignature OnHoldingBreathChanged;
469 UPROPERTY(BlueprintAssignable, Category = "Locomotion Events")
470 FLocomotionChangeSignature OnDashingChanged;
471 UPROPERTY(BlueprintAssignable, Category = "Camera Events")
472 FToggleViewSignature OnPerspectiveChanged;
473 UPROPERTY(BlueprintAssignable)
474 FHitNotificationSignature OnHitNotification;
475 UPROPERTY(BlueprintAssignable)
476 FLandedSignature OnLand;
477 UPROPERTY(BlueprintAssignable)
478 FInputDisabledSignature OnInputDisabled;
479 UPROPERTY(BlueprintAssignable)
480 FNotEnoughEnergySignature OnNotEnoughEnergy;
481 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
482 FPawnLockOnSignature OnLockOnTentativeStart;
483 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
484 FPawnLockOnSignature OnLockOnTentativeEnd;
485 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
486 FPawnLockOnSignature OnLockOnStart;
487 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
488 FPawnLockOnSignature OnLockOnEnd;
489 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
490 FPawnIncomingProjectileSignature OnIncomingProjectileStart;
491 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
492 FPawnIncomingProjectileSignature OnIncomingProjectileEnd;
493 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
494 FPawnImminentMissileWarningSignature OnImminentMissileWarningStart;
495 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
496 FPawnImminentMissileWarningSignature OnImminentMissileWarningEnd;
497 UPROPERTY(BlueprintAssignable, Category = "Soft BoundaryEvents")
498 FSoftBoundaryEvent OnSoftBoundaryEnterEvent;
499 UPROPERTY(BlueprintAssignable, Category = "Player Events")
500 FVehicleChangedSignature OnVehicleChanged;
501 UPROPERTY(BlueprintAssignable, Category = "Player Events")
502 FCharacterDamagedAt OnCharacterHitAtLocation;
503 UPROPERTY(BlueprintAssignable)
504 FPlayerStateChangedSignature OnPlayerStateChangedEvent;
505 UPROPERTY(BlueprintAssignable)
506 FCharacterPlayerStateChangedSignature OnCharacterPlayerStateChangedEvent;
507 UPROPERTY(BlueprintAssignable)
508 FOnFootstepSignature OnFootstep;
509 UPROPERTY(BlueprintAssignable)
510 FDashEventSignature OnDashChargesUpdatedEvent;
511 UPROPERTY(BlueprintAssignable)
512 FDashEventSignature OnMaxDashChargeCountUpdatedEvent;
513 UPROPERTY(BlueprintAssignable)
514 FDashEventRechargeSignature OnDashRechargingEvent;
515 UPROPERTY(BlueprintAssignable)
516 FVisibilityChangedSignature OnVisibilityChanged;
517 FMutateDamageSignature OnMutateDamage; //Handy event for intercepting damage before its applied
518
519 /* Allow testing of the player hands position at runtime for weapons. */
520 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = Camera)
521 bool bWeaponPositionDebug = false;
522 /* list of weapons and abilites*/
523 UPROPERTY(EditDefaultsOnly, Category = "Player Class")
524 FInventory PlayerInventory;
525 UPROPERTY(EditDefaultsOnly, Category = "Player Class")
526 bool bUsePlayerInventoryAndIgnoreCloudOverrides = false;
527 /* Duration of the character dash*/
528 UPROPERTY(EditDefaultsOnly, Category = "Movement")
529 float DashForce = 6000.0f;
530
531 bool bIsUsingTekelenesis = false;
532 float TelekenesisStaminaDrainRate = 0.0f;
533 int32 DashCharges;
534 int32 DeferedDashCharges;
535 float GrenadeAOEMultiplier = 1.0f;
536 float PersonalVehicleDamageMultiplier = 1.0f;
537
538 virtual void BeginPlay() override;
539 virtual void OffscreenFootstep();
540 virtual bool ActorTick(float DeltaTime);
541 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
542 virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override;
543 virtual void UnPossessed() override;
544 virtual bool CanJumpInternal_Implementation() const;
545 virtual void TornOff() override;
546 virtual void MoveForward(float Val);
547 virtual void MoveUp(float Val);
548 virtual void MoveRight(float Val);
549 virtual void TurnAtRate(float Rate);
550 virtual void LookUpAtRate(float Rate);
551 virtual void Turn3PCamera(float Val);
552 virtual void LookUp3PCamera(float Val);
553 virtual void CheckJumpInput(float DeltaTime) override;
554 virtual void CheckForOwnedHealingSources();
555 virtual void OnMovementModeChanged(EMovementMode PrevMovementMode, uint8 PreviousCustomMode = 0);
556 virtual void ApplyDamageMomentum(float DamageTaken, FDamageEvent const& DamageEvent, APawn* PawnInstigator, AActor* DamageCauser) override;
557 virtual float InternalTakeRadialDamage(float Damage, struct FRadialDamageEvent const& RadialDamageEvent, class AController* EventInstigator, AActor* DamageCauser) override;
558 virtual float InternalTakePointDamage(float Damage, struct FPointDamageEvent const& PointDamageEvent, class AController* EventInstigator, AActor* DamageCauser) override;
559 /* Toggles the Grass Fade effect on/off on the VisualsMaterialParameterCollection asset that can be used to do changes to materials */
560 virtual void SetGrassNearCameraFade(bool bHideNearCamera);
561 virtual void PackInput();
562
563 UFUNCTION()
564 void TriggerDash();
565 UFUNCTION()
566 void UpdateDashCoolDown();
567 void CreateDashCoolDownTimer(float DashCoolDown);
568 UFUNCTION()
569 virtual void ContextualInteract();
570 UFUNCTION()
571 virtual void StopContextualInteract();
572 UFUNCTION()
573 void OnWeaponAdded(UWeaponInstance* Weapon);
574
575 virtual void StartDashMovement();
576 virtual void StopDashMovement();
577 virtual void UpdateDashCharges(int32 Delta,bool bForce = false);
578 virtual bool ShouldDeferDashCharges() const;
579 //*Graffiti
580 void SpawnGraffiti(const FHitResult& Hit);
581 UFUNCTION(Reliable, Server)
582 void Server_SpawnGraffiti(const FHitResult& Hit);
583 UFUNCTION(BlueprintCallable, Unreliable, NetMulticast)
584 void Multicast_PlayMontage(UAnimMontage* Montage);
585 UFUNCTION(Unreliable, NetMulticast)
586 void Multicast_SpawnGraffiti(const FHitResult& Hit);
587 UFUNCTION(Reliable, NetMulticast)
588 void Multicast_Die(float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser, const FHitResult& Hit, APlayerState* InstigatorPlayerState);
589 void TriggerGraffiti();
590
591 //Called every frame by the locally controlled client.
592 UFUNCTION(Server, Unreliable)
593 void Server_Unreliable_SendPitchValue(uint16 NewPawnPitchValue);
594 UFUNCTION(Server, Unreliable)
595 void Server_Unreliable_SendYawValue(uint16 NewPawnPitchValue);
596 //Called every frame by the locally controlled client.
597 UFUNCTION(Server, Unreliable)
598 void Server_Unreliable_SendPackedInput(uint8 NewInput);
599 UFUNCTION(Server, Reliable)
600 void Server_Reliable_StartDashMovement();
601
602 UFUNCTION()
603 virtual void OnRep_Vehicle();
604 UFUNCTION()
605 virtual void OnTightAimingStop();
606
607 UFUNCTION()
608 virtual float ApplyDamageTypeResistance(float InDamage, const TSubclassOf<UDamageType> InDamageType);
609
610 virtual void PossessedBy(AController* NewController);
611
612 /* Base turn rate, in deg/sec. Other scaling may affect final turn rate. */
613 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera)
614 float BaseTurnRate;
615 /* Base look up/down rate, in deg/sec. Other scaling may affect final rate. */
616 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera)
617 float BaseLookUpRate;
618 /* Should this character's camera fade the grass in front of it when driving a vehicle? */
619 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Camera)
620 bool bShouldCameraFadeGrassWhenInVehicle = true;
621 /* The range for the fading effect on grass in front of the camera when bShouldCameraFadeGrass is set to true */
622 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Camera, meta = (EditCondition = "bShouldCameraFadeGrassWhenInVehicle"))
623 float CameraFadesGrassRange = 425.f;
624 /* Material parameter collection that we can interact with based on custom logic (For example, when driving vehicles)*/
625 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = Camera)
626 UMaterialParameterCollection* VisualsMaterialParameterCollection = NULL;
627 /* Amount of time after a player loses grounding before their first jump is considered "consumed" */
628 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Jumping)
629 float FirstJumpForgivenessTime = 0.5f;
630 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Character)
631 int32 TeamOverride = -1;
632 /* Should we apply fall damage? */
633 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement")
634 bool bUseFallDamage = false;
635 /* X = Minumum velocity for the player to begin feeling falling damage, Y = Velocity where they player will experience maximum falling damage. */
636 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement", meta = (EditCondition = "bbUseFallDamage"))
637 FVector2D FallingDamageVelocityThreshold = FVector2D(500.0f, 2000.0f);
638 /* X = Minimum falling damage, Y = Maximum possible falling damage */
639 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement", meta = (EditCondition = "bbUseFallDamage"))
640 FVector2D FallingDamageAmount = FVector2D(5.0f, 100.0f);
641 /* Reduce player stamina as a result of falling. X = Minimum falling stamina penalty, Y = Maximum possible falling stamina penalty */
642 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement", meta = (EditCondition = "bbUseFallDamage"))
643 FVector2D FallingStaminaDamageAmount = FVector2D(5.0f, 100.0f);
644 /* How many times faster is the character when running vs walking */
645 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement")
646 float RunSpeedMultiplier = 1.6f;
647 /* How many times faster is the character when crouch-walking vs crouch-walking */
648 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement")
649 float RunCrouchSpeedMultiplier = 1.6f;
650 /* How much vertical offset to apply when crouched to the 1P camera? */
651 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement")
652 float Crouch1PCameraVerticalOffset = -40.f;
653 /* Multiplies the damage and direction of a projectile to apply force on the ragdoll. Larger the value, the more violent the force is. */
654 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement")
655 float RagdollProjectileForceMultiplier = 5000.0f;
656 /*How much XP to reward if killed*/
657 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
658 float XPReward = 100.0f;
659 /* Maximum player stamina */
660 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
661 float MaxStamina = 100.0f;
662 /* Are we allowed to recover stamina? */
663 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Gameplay|Stats")
664 bool bCanRecoverStamina = true;
665 /* Amount of stamina to recover per second while not running */
666 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats", meta = (EditCondition="bRecoverStamina"))
667 float StaminaRecoveryRate = 5.0f;
668 /* Amount of time after consuming stamina before it starts to recover */
669 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats", meta = (EditCondition = "bRecoverStamina"))
670 float StaminaRecoveryDelay = 0.1f;
671 /* Amount of stamina to drain per second while running */
672 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
673 float StaminaDrainRate = 5.0f;
674 /* How much stamina to drain per second while water running */
675 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
676 float WaterRunStaminaDrainRate = 10.f;
677 /* How much stamina to drain per second while boosting */
678 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
679 float BoostingStaminaDrainRate = 20.f;
680 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
681 float HoldingBreathStaminaDrainRate = 20.f;
682 /* How much stamina to we charge in order for the player to start running? This prevents players from tapping run on and off continuously. */
683 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
684 float StaminaInitialCost = 5.0f;
685 /* How much stamina to we charge in order for the player to start boosting? This prevents players from tapping boost on and off continuously. */
686 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
687 float BoostingInitialStaminaCost = 10.0f;
688 /* How much stamina to we charge for jumping? Index is JumpCount. First Jump = Index 0, Double Jump = Index 1, Triple Jump = Index 2 ... If none is declared or the current jumpcount doesnt'have a value, it will default to the previous one, if any, 10 is going to be used */
689 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
690 TArray<float> JumpStaminaCosts {0.0f, 10.0f};
691 /* Used to make the pawn more or less resistant to certain damage types */
692 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Stats")
693 TArray<FDamageTypeResistance> DamageTypeResistances;
694 /* This character's icon that is to be displayed on the map*/
695 UPROPERTY(EditDefaultsOnly, Category = "UI")
696 TSoftObjectPtr<UTexture2D> CharacterMapIcon = NULL;
697 /* This character's icon that is to be displayed on enemies' huds when spotted*/
698 UPROPERTY(EditDefaultsOnly, Category = "UI")
699 TSoftObjectPtr<UTexture2D> CharacterHudIcon = NULL;
700 /* This character's icon that is to be displayed on enemies' radars when spotted*/
701 UPROPERTY(EditDefaultsOnly, Category = "UI")
702 TSoftObjectPtr<UTexture2D> CharacterRadarIcon = NULL;
703 /* Duration of the character dash*/
704 UPROPERTY(EditDefaultsOnly, Category = "Movement")
705 float DashDuration = 0.2f;
706 /*time between dashes*/
707 UPROPERTY(EditDefaultsOnly, Category = "Movement")
708 float DashCoolDownDuration = 3.0f;
709 /* The vehicle this character is driving, if any */
710 UPROPERTY(ReplicatedUsing = OnRep_Vehicle)
711 TWeakObjectPtr<AProjectXVehicle> Vehicle = NULL;
712 /* The last vehicle this character drove, if any*/
713 UPROPERTY()
714 TWeakObjectPtr<AProjectXVehicle> PreviousVehicle = NULL;
715 /* DateTime when this character left the last vehicle it was in */
716 FDateTime TimeWhenLeftPreviousVehicle;
717 /*Kill Camera class to spawn*/
718 UPROPERTY(EditDefaultsOnly, Category = "Character|KillCam")
719 TSubclassOf<class AKillCameraActor> KillCamActorClass = NULL;
720 /*How far Away is the kill cam from the mesh*/
721 UPROPERTY(EditDefaultsOnly, Category = "Character|KillCam")
722 float KillCameraDistance = 0.0f;
723 UPROPERTY(EditDefaultsOnly, Category = "Character|Loadout")
725 UPROPERTY(EditDefaultsOnly, Category = "Character|Loadout")
726 TSubclassOf<APickupReviveBeacon> ReviveBeaconClass;
727 /*Total Ultimate Charge*/
728 UPROPERTY(EditDefaultsOnly, Category = "Player Class")
729 int32 MaxUltimateCharge = 2;
730 /*Total Ultimate Charge*/
731 UPROPERTY(EditDefaultsOnly, Category = "Player Class")
732 float PersonalVehicleHoldTriggerTime = 0.2f;
733 /* How long to wait after the player takes damage before we start recharging their health */
734 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Health|Regen", meta = (EditCondition = "bUsePassiveHealthRegen"))
735 float PassiveHealthRegenDelay = 3.f;
736 /* How fast do we recharge the player's health after taking damage? */
737 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Health|Regen", meta = (EditCondition = "bUsePassiveHealthRegen"))
738 float PassiveHealthRegenRate = 10.f;
739 /* Should the player's health passively recharge when out of combat? */
740 UPROPERTY(GlobalConfig, EditDefaultsOnly, BlueprintReadOnly, Category = "Health|Regen")
741 bool bUsePassiveHealthRegen = true;
742 /* How long to wait after the player takes damage before we start recharging their shields */
743 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Shields|Regen", meta = (EditCondition = "bUsePassiveShieldRegen"))
744 float PassiveShieldRegenDelay = 3.f;
745 /* How fast do we recharge the player's shields after taking damage? */
746 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Shields|Regen", meta = (EditCondition = "bUsePassiveShieldRegen"))
747 float PassiveShieldRegenRate = 10.f;
748 /* Should the player's shields passively recharge when out of combat? */
749 UPROPERTY(GlobalConfig, EditDefaultsOnly, BlueprintReadOnly, Category = "Shields|Regen")
750 bool bUsePassiveShieldRegen = true;
751 /* How much score is awarded for spawn logics if this is a Squadmate? */
752 UPROPERTY(EditDefaultsOnly, Category = "Spawn Scoring")
753 float SquadmateScoringWeight = 1.f;
754 /* The maximum distance considered for awarding a score increment, every distance bigger than this value will award 0 score. Value needs to be > 0*/
755 UPROPERTY(EditDefaultsOnly, Category = "Spawn Scoring")
756 float CharacterDistanceScoringWeight = 50000.f;
757 /* Front Facing Name of the Class*/
758 UPROPERTY(EditDefaultsOnly, Category = "Player Class")
759 FText ClassName = FText::FromString("");
760 /* Front Facing info on the class */
761 UPROPERTY(EditDefaultsOnly, Category = "Player Class")
762 FText ClassDescription = FText::FromString("");
763 /* Internal used id to identify the class */
764 UPROPERTY(EditDefaultsOnly, Category = "Player Class")
765 FString ClassID = "";
766
767 UPROPERTY(EditDefaultsOnly, Category = "Graffiti")
768 FVector GraffitiSize = FVector(10, 200, 200);
769 UPROPERTY(EditDefaultsOnly, Category = "Graffiti")
770 float GraffitiSprayDistance = 1500.0f;
771
772 /* UI Icon for this class*/
773 UPROPERTY(EditDefaultsOnly, Category = "Player Class")
774 TSoftObjectPtr<UMaterialInstance> ClassIcon = NULL;
775
776 UPROPERTY(ReplicatedUsing = OnRep_Health)
777 float Health = 100.0f;
778 /* Maximum player health */
779 UPROPERTY(GlobalConfig, EditDefaultsOnly, Replicated, Category = "Health")
780 float MaxHealth = 100.0f;
781 /* Do we telegraph armor when hit? */
782 UPROPERTY(GlobalConfig, EditDefaultsOnly, Category = "Health")
783 bool bArmored = false;
784 UPROPERTY(ReplicatedUsing = OnRep_Shields)
785 float Shields = 100.0f;
786 /* Maximum shields player can have, including overcharge*/
787 UPROPERTY(GlobalConfig, EditDefaultsOnly, Replicated, Category = "Shields")
788 float MaxShieldsWithOvercharge = 150.0f;
789 /* Maximum shields player can have (without taking overcharge into account) */
790 UPROPERTY(GlobalConfig, EditDefaultsOnly, Replicated, Category = "Shields")
791 float MaxShields = 100.0f;
792 /*Can The Character Boost*/
793 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Movement")
794 bool bCanBoost = false;
795 UPROPERTY(ReplicatedUsing= OnRep_Visibility)
797 /*Toggles whether this pawn should Ragdoll*/
798 UPROPERTY(EditDefaultsOnly, Category = "Ragdoll")
799 bool bCanRagdoll = true;
801 UPROPERTY(Replicated, Transient, Category = "Input", BlueprintReadOnly)
802 uint8 PackedInput = 0;
804 UPROPERTY(ReplicatedUsing=OnRep_YawPitch)
805 uint32 PackedPitchYaw = 0;
806 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Player Class")
807 TMap<EXPEventType, float> HealthOnExpEvent;
808 /*Returns the max distance this character can be to be considered for locking-into. This means that if
809 we scan for 20km targets but this actor has a MaxLockOnRange of 100m and this actor is further away than
810 100m it won't be considered as a candidate during the target-finding.
811 A returned value of 0 is by default ignored by target-finding systems */
812 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|LockOn")
813 float MaxLockOnRange = 0.f;
814 /* Returns the Screen percentage that this character is required to have to be considered for Locking-onto (In both vertical and horizontal axis of the viewport).
815 A value of FVector2D(0,0) will by default be ignored by weapons when deciding locking-into candidates. For example, when scanning for a 20km range, if this actor
816 has a screen percentage bigger than GetLockOnScreenPercentage() (in any axis) it is going to be considered as a candidate to be locked into. This is useful as
817 actors that are really far away can still look big on the screen and feels like they should be locked into */
818 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|LockOn")
819 FVector2D LockOnScreenPercentage = FVector2D::ZeroVector;
820 UPROPERTY(EditDefaultsOnly, Category = Afflictions)
821 class UAfflictionComponent* AfflictionComponent = NULL;
822 UPROPERTY(EditDefaultsOnly, Category = DamageHistory)
823 class UDamageHistoryComponent* DamageHistoryComponent = NULL;
824 UPROPERTY()
825 UJetPackComponent* JetpackComponent = NULL;
826
827 bool bCanPassiveRegen = true;
828 bool bCanOverchargeShields = false;
829 bool bDead = false;
830 float HealthRegenRate = 0.0f;
831 float ShieldRegenRate = 0.0f;
832 float CombinedRegenRate = 0.0f;
833 float TicketPickupMultiplier = 1.0f;
834 TWeakObjectPtr<APlayerState> OwningPlayerState;
835 TWeakObjectPtr<class UAfflictionInstance> PassiveRegenAffliction = nullptr;
836 float CachedStaminaRecoveryRate = 0.0f;
837 FTimerHandle PassiveHealthRegenTimer;
838 FTimerHandle DashMovementTimer;
839 FTimerHandle DashCoolDownTimer;
840 FTimerHandle StaminaRecoverlyDelayTimerHandle;
841 FTimerHandle PVHoldTimer;
842
843private:
844 UFUNCTION(Server, Reliable, WithValidation)
845 void Server_ToggleRun(const bool bToggle);
846 UFUNCTION(Server, Reliable, WithValidation)
847 void Server_ToggleBoosting(const bool bToggle);
848 UFUNCTION(Server, Reliable, WithValidation)
849 void Server_ToggleHoldingBreath(const bool bToggle);
850 UFUNCTION(Server, Reliable, WithValidation)
851 void Server_ToggleFastFall(const bool bToggle);
852 UFUNCTION(Client, Reliable)
853 void Client_ToggleRun(const bool bToggle);
854 UFUNCTION(Client, Reliable)
855 void Client_ToggleFastFall(const bool bToggle);
856 UFUNCTION(Client, Reliable)
857 void Client_StatOverTimeStarted(const ECharacterStat StatType, const float StatDelta, const float Time);
858 UFUNCTION(Server, Reliable, WithValidation)
859 void Server_ToggleClamber(const bool bToggle);
860
861 void Client_Die(float Damage, struct FDamageEvent const& DamageEvent, AActor* Killer, class AProjectXPlayerState* InstigatorState);
862
863 UFUNCTION()
864 void FindCameraFollowTarget();
865
866 void SendPlayerCountData();
867 void ToggleRun(const bool bToggle);
868 void ToggleBoosting(const bool bToggle);
869 void ToggleHoldingBreath(const bool bToggle);
870 void ToggleFastFall(const bool bToggle);
871 void ApplyFallDamage();
872 /* This needs to be called before a proper Cleanup is executed so all resources are available */
873 void BroadcastOnDeathXPBonuses(const FDamageEvent& KillDamageEvent, AProjectXPlayerState* KillerPlayerState);
874 void CleanUp(bool bDelayedDestroy = true);
875 void UnpossessAndDestroy();
876
877 UPROPERTY(VisibleInstanceOnly, ReplicatedUsing = OnRep_Stamina, BlueprintReadOnly, Category = "Gameplay|Stats", meta = (AllowPrivateAccess = true))
878 float Stamina = 100.0f;
879 UPROPERTY(Replicated)
880 bool bIsRunning = false;
881 UPROPERTY(ReplicatedUsing = OnRep_IsBoosting)
882 bool bIsBoosting = false;
883 UPROPERTY(ReplicatedUsing = OnRep_IsHoldingBreath)
884 bool bIsHoldingBreath = false;
885 UPROPERTY(Replicated = OnRep_IsDashing)
886 bool bIsDashing = false;
887 UPROPERTY(Replicated)
888 bool bCanMove = true;
889 UPROPERTY(ReplicatedUsing = OnRep_CanRotate)
890 bool bCanRotate = true;
891 UPROPERTY(Replicated)
892 bool bCanJump = true;
893 UPROPERTY(ReplicatedUsing = OnRep_CanStealth)
894 bool bCanStealth = true;
895 UPROPERTY(EditDefaultsOnly, meta = (ClampMin = 0.0f, ClampMax = 1.0f), Category = "Gameplay")
896 float LowHealthVOThreshold = 0.25f;
897 UPROPERTY(EditDefaultsOnly, Category = "Gameplay")
898 float LowHealthVODelay = 20.0f;
899 float DamageResistance = 1.0f;
900 float DamageResistanceExplosive = 1.0f;
901 bool bIsFastFalling = false;
902 float HealthPickupModifier = 1.0f;
903 bool bDeferDashChargesInAIr = true;
904 bool bRecentlyConsumedStamina = false;
905 /* This stores a cache for this bounds setting so that whenever we change vehicles we can restore the previously configured state */
906 bool bUseAttachParentBoundCached = false;
907 /* Should this character drop all their items on death? */
908 UPROPERTY(EditDefaultsOnly, Category = "Gameplay|Equipment", meta = (AllowPrivateAccess = true))
909 bool bDropItemsOnDeath = false;
910 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Gameplay|Death", meta = (AllowPrivateAccess = true))
911 float RagdollLifeSpan = 25.0f;
912 UPROPERTY(VisibleDefaultsOnly, Category = Components)
913 UAmbianceComponent* AmbianceComponent = NULL;
914 UPROPERTY(VisibleDefaultsOnly,BlueprintReadOnly, meta = (AllowPrivateAccess = true))
915 UCosmeticsComponent* CosmeticsComponent = NULL;
916 UPROPERTY(VisibleDefaultsOnly, Category = Components)
917 UWeaponComponent* WeaponComponent = NULL;
918 UPROPERTY(VisibleDefaultsOnly, Category = Components)
919 UHookshotComponent* HookShotComponent = NULL;
920 UPROPERTY(VisibleDefaultsOnly, Category = Components)
921 UInteractionComponent* InteractionComponent = NULL;
922 UPROPERTY(VisibleDefaultsOnly, Category = Components)
923 UAimSphereComponent* AimSphereComponent = NULL;
924 UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
925 USpringArmComponent* CameraBoom = NULL;
926 UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
927 UCameraComponent* FollowCamera = NULL;
928 UPROPERTY(VisibleDefaultsOnly, Category = Camera)
929 UCameraComponent* FirstPersonCameraComponent = NULL;
930 UPROPERTY(VisibleDefaultsOnly, BlueprintReadWrite, Category = Camera, meta = (AllowPrivateAccess = true))
931 USceneComponent* FirstPersonFollowComponent = NULL;
932 mutable AProjectXPlayerController* ProjectXPlayerController = NULL;
933 uint8 InteriorVolumeSemaphore = 0;
934 float LostGroundednessTime = 0.0f;
935 float NextRotationSendTime = 0.f;
936 float LastDamageTime = -MAX_FLT;
937 bool bRotationFlipFlop = false;
938 bool bPackInputFlipFlop = false;
939 bool bDashEnabled = true;
940 float VehicleSpeedModifier = 1.0f;
941 bool bResetDashesOnKill = false;
942 bool bCanSpawnInCombat = false;
943 FRotator CurrentLookRotation = FRotator::ZeroRotator;
944 FRotator LookRotation = FRotator::ZeroRotator;
945 FVector CameraDefaultRelativeLocation;
946 float CachedBaseEyeHeight;
947 FName WeaponSocket = NAME_None;
948 TArray<TSubclassOf<UWeaponInstance>> WeaponListStatic;
949 //Sometimes we are remote controlling a deployable outside the Possess scope, so we keep track of it here.
950 TWeakObjectPtr<AActor> ActorUnderControl = nullptr;
951 bool bCanPlayLowHealthVO = true;
952 bool bIsPlayingTauntMontage = false;
953
954 FString SquadWipe = "VO_SquadWipe";
955 FString KilledEnemyPV = "VO_VehicleDestroyed";
956 FString LowHealth = "VO_LowHealth";
958 FTickerDelegate TickDelegate;
960 FDelegateHandle TickDelegateHandle;
961
962};
EPerkType
Definition: CosmeticAssetBase.h:61
EXPEventType
Definition: PlayerStats.h:13
EEquipSlot
Definition: PlayerStructs.h:25
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FVisibilityChangedSignature, bool, bVisible, float, VisibleTimeStamp)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FToggleViewSignature)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnFootstepSignature, class UPhysicalMaterial *, PhysicsMaterial)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FMutateDamageSignature, float &, Damage, struct FDamageEvent const &, DamageEvent, AController *, EventInstigator, AActor *, DamageCauser)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FStatOverTimeModificationAdded, const ECharacterStat, StatType, const float, StatDelta, const float, Time)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FiveParams(FHitNotificationSignature, float, Damage, bool, bHeadshot, TSubclassOf< UDamageType >, DamageType, AActor *, DamagingActor, float, RadialDamageLerp)
ECharacterStat
Definition: ProjectXCharacter.h:65
EInputDirection
Definition: ProjectXCharacter.h:74
ESpotType
Definition: SpottableInterface.h:18
ESpotReply
Definition: SpottableInterface.h:27
Definition: KillCameraActor.h:19
Definition: PickupReviveBeacon.h:48
Definition: ProjectXCharacter.h:128
virtual void SetDamageResistance(float NewValue) override
Definition: ProjectXCharacter.h:392
virtual bool GetCachedUsesPassiveShieldRegen() const override
Definition: ProjectXCharacter.h:337
virtual float GetExplosiveDamageResistance() const override
Definition: ProjectXCharacter.h:395
virtual FPawnLockOnSignature & GetLockOnEndDelegate() override
Definition: ProjectXCharacter.h:363
virtual float GetHealthPickupModifier() const override
Definition: ProjectXCharacter.h:340
virtual float GetHealth() const override
Definition: ProjectXCharacter.h:332
virtual float GetCachedOvershield() const override
Definition: ProjectXCharacter.h:336
virtual FPawnLockOnSignature & GetLockOnStartDelegate() override
Definition: ProjectXCharacter.h:362
virtual void SetOvershield(float NewOvershield) override
Definition: ProjectXCharacter.h:322
virtual bool IsDead() const override
Definition: ProjectXCharacter.h:346
virtual bool IsArmored() const
Definition: ProjectXCharacter.h:331
void UpdateResetDashesOnKill(bool bNewResetDashOnKill)
Definition: ProjectXCharacter.h:254
virtual float GetLockOnMaxDistance() override
Definition: ProjectXCharacter.h:358
virtual bool CanModifyShieldsPastOverchargeMark() const override
Definition: ProjectXCharacter.h:342
void ModifyCanOverchargeShields(bool bNewCanOverchargeShields)
Definition: ProjectXCharacter.h:389
virtual void SetCanModifyShieldsPastOverchargeMark(bool bNewCanOverchargeShields)
Definition: ProjectXCharacter.h:343
virtual float GetDamageResistance() const override
Definition: ProjectXCharacter.h:394
virtual FPawnLockOnSignature & GetLockOnTentativeEndDelegate() override
Definition: ProjectXCharacter.h:361
virtual float GetMaxHealth() const override
Definition: ProjectXCharacter.h:333
virtual FVector GetSpottingTraceOffset() const override
Definition: ProjectXCharacter.h:371
void ModifyCanRecoverStamina(bool NewState)
Definition: ProjectXCharacter.h:383
virtual TSoftObjectPtr< UTexture2D > GetMapIcon() const override
Definition: ProjectXCharacter.h:372
FORCEINLINE void SetActorUnderControl(AActor *NewActor)
Definition: ProjectXCharacter.h:218
virtual bool IsCloaked() const override
Definition: ProjectXCharacter.h:267
FORCEINLINE FDateTime GetTimeWhenLeftPreviousVehicle() const
Definition: ProjectXCharacter.h:215
virtual bool IsUsingPassiveShieldRegen() const override
Definition: ProjectXCharacter.h:341
virtual void SetHealthPickupModifier(float NewModifier) override
Definition: ProjectXCharacter.h:339
virtual float GetMaxShields() const override
Definition: ProjectXCharacter.h:323
virtual FPawnIncomingProjectileSignature & GetIncomingProjectileEndDelegate() override
Definition: ProjectXCharacter.h:365
virtual void SetMaxHealth(float NewValue) override
Definition: ProjectXCharacter.h:325
virtual void SetExplosiveDamageResistance(float NewValue) override
Definition: ProjectXCharacter.h:393
virtual float GetCachedMaxHealth() const override
Definition: ProjectXCharacter.h:334
virtual FPawnImminentMissileWarningSignature & GetImminentMissileWarningStartDelegate() override
Definition: ProjectXCharacter.h:366
virtual AActor * GetTrackableInterfaceActor() override
Definition: ProjectXCharacter.h:375
virtual float GetShields() const override
Definition: ProjectXCharacter.h:320
virtual TSoftObjectPtr< UTexture2D > GetRadarIcon() const override
Definition: ProjectXCharacter.h:373
void ModifyCanPassiveRegen(bool bNewCanPassiveRegen)
Definition: ProjectXCharacter.h:388
virtual FSoftBoundaryEvent & GetOnSoftBoundaryEnterEvent() override
Definition: ProjectXCharacter.h:368
virtual void UpdateCanSpawnOnCombatTarget(bool bNewInCombatSpawnTarget)
Definition: ProjectXCharacter.h:318
FORCEINLINE AProjectXVehicle * GetPreviousVehicle() const
Definition: ProjectXCharacter.h:214
virtual float GetCachedMaxShields() const override
Definition: ProjectXCharacter.h:335
virtual FPawnIncomingProjectileSignature & GetIncomingProjectileStartDelegate() override
Definition: ProjectXCharacter.h:364
virtual void SetShieldRegenRate(float NewRate) override
Definition: ProjectXCharacter.h:329
void UpdateTicketPickupMultiplier(float NewMultiplier)
Definition: ProjectXCharacter.h:285
virtual void SetShieldAndHealthRegenRate(float NewRate) override
Definition: ProjectXCharacter.h:330
virtual float GetMaxShieldsWithOvercharge() const override
Definition: ProjectXCharacter.h:321
virtual TSoftObjectPtr< UTexture2D > GetHudIcon() const override
Definition: ProjectXCharacter.h:374
virtual void SetMaxShields(float NewValue) override
Definition: ProjectXCharacter.h:326
virtual FPawnLockOnSignature & GetLockOnTentativeStartDelegate() override
Definition: ProjectXCharacter.h:360
virtual FVector2D GetLockOnScreenPercentage() override
Definition: ProjectXCharacter.h:359
virtual FPawnImminentMissileWarningSignature & GetImminentMissileWarningEndDelegate() override
Definition: ProjectXCharacter.h:367
Definition: ProjectXPlayerController.h:83
Definition: ProjectXPlayerState.h:238
Definition: ProjectXVehicle.h:56
Definition: HealthInterface.h:28
Definition: KillCamInterface.h:21
Definition: LockOnTargetInterface.h:27
Definition: ObjectInfoInterface.h:16
Definition: OwnedInterface.h:20
Definition: ReactsToGameplayVolumes.h:20
Definition: ReactsToMatchEvents.h:16
Definition: SpawnTargetInterface.h:18
Definition: SpottableInterface.h:40
Definition: TeamInterface.h:26
Definition: TrackableInterface.h:22
Definition: AdvancedUserWidget.h:30
Definition: AimSphereComponent.h:11
Definition: CosmeticsComponent.h:254
Definition: ProjectXCharacterMovement.h:27
Definition: WeaponInstance.h:220
Definition: ProjectXCharacter.h:52
Definition: ProjectXDamageType.h:35
Definition: ProjectXCharacter.h:91
Definition: ProjectXCharacter.h:99
Definition: ProjectXCharacter.h:83