155 lines
5.6 KiB
C++
Executable file
155 lines
5.6 KiB
C++
Executable file
#pragma once
|
|
#include "CoreMinimal.h"
|
|
#include "AudioWithCooldown.h"
|
|
#include "FullHealthSignatureDelegate.h"
|
|
#include "HealthComponent.h"
|
|
#include "HealthRegeneratingChangedDelegate.h"
|
|
#include "HealthRegenerationParams.h"
|
|
#include "HitSigDelegate.h"
|
|
#include "RejoinListener.h"
|
|
#include "Templates/SubclassOf.h"
|
|
#include "PlayerHealthComponent.generated.h"
|
|
|
|
class AActor;
|
|
class AController;
|
|
class APlayerCharacter;
|
|
class UCurveFloat;
|
|
class UParticleSystem;
|
|
class UParticleSystemComponent;
|
|
class UPlayerDamageTakenMutator;
|
|
class UStatusEffect;
|
|
|
|
UCLASS(Blueprintable, ClassGroup=Custom, meta=(BlueprintSpawnableComponent))
|
|
class UPlayerHealthComponent : public UHealthComponent, public IRejoinListener {
|
|
GENERATED_BODY()
|
|
public:
|
|
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
FFullHealthSignature OnFullHealthCannotHeal;
|
|
|
|
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
FFullHealthSignature OnHealedFromCrystalEvent;
|
|
|
|
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
FHealthRegeneratingChanged OnHealthRegeneratingChanged;
|
|
|
|
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
FHitSig OnPlayerHit;
|
|
|
|
protected:
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, ReplicatedUsing=OnRep_MaxHealth, meta=(AllowPrivateAccess=true))
|
|
float MaxHealth;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, ReplicatedUsing=OnRep_MaxArmor, meta=(AllowPrivateAccess=true))
|
|
float MaxArmor;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_ArmorDamage, meta=(AllowPrivateAccess=true))
|
|
float ArmorDamage;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
float ReviveHealthReturnRatio;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
float ReviveArmorReturnRatio;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
float HealthPerCrystalVolume;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
FHealthRegenerationParams HealthRegeneration;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
UCurveFloat* ArmorRegenCurve;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
float ShieldRegenDelay;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true))
|
|
APlayerCharacter* Character;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
UParticleSystem* GenericImpactParticles;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
UParticleSystem* ShieldLinkEffect;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
FAudioWithCooldown AudioFriendlyFire;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true))
|
|
UParticleSystemComponent* ShieldLinkInstance;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
float InvulnerabilityDuration;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
float ReviveInvulnerabilityTime;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true))
|
|
UPlayerDamageTakenMutator* DamageTakenMutator;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true))
|
|
TSubclassOf<UStatusEffect> IronWillStatusEffectClass;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true))
|
|
UStatusEffect* IronWillStatusEffect;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Replicated, Transient, meta=(AllowPrivateAccess=true))
|
|
bool IronWillActive;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
|
|
float IronWillTimeToActivate;
|
|
|
|
public:
|
|
UPlayerHealthComponent();
|
|
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
|
|
|
|
UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable)
|
|
UStatusEffect* SetIronWillStatusEffect(TSubclassOf<UStatusEffect> steClass);
|
|
|
|
UFUNCTION(BlueprintCallable, Reliable, Server)
|
|
void Server_TryActivateIronWill();
|
|
|
|
protected:
|
|
UFUNCTION(BlueprintCallable)
|
|
void OnRep_MaxHealth();
|
|
|
|
UFUNCTION(BlueprintCallable)
|
|
void OnRep_MaxArmor();
|
|
|
|
UFUNCTION(BlueprintCallable)
|
|
void OnRep_ArmorDamage(float oldDamage);
|
|
|
|
public:
|
|
UFUNCTION(BlueprintCallable, BlueprintPure)
|
|
bool IsLowHealth() const;
|
|
|
|
UFUNCTION(BlueprintCallable, BlueprintPure)
|
|
float GetRemainingIronWillActivationTime() const;
|
|
|
|
UFUNCTION(BlueprintCallable, BlueprintPure)
|
|
bool GetIsHealthRegenerating() const;
|
|
|
|
UFUNCTION(BlueprintCallable, BlueprintPure)
|
|
bool GetIronWillActive() const;
|
|
|
|
UFUNCTION(BlueprintCallable, BlueprintPure)
|
|
float GetHealthRegeneratingTargetRatio() const;
|
|
|
|
protected:
|
|
UFUNCTION(BlueprintCallable, Client, Reliable)
|
|
void Client_SetHealthRegenerating(bool isRegenerating);
|
|
|
|
UFUNCTION(BlueprintCallable, Client, Unreliable)
|
|
void Client_OnFriendlyFire(AController* EventInstigator, AActor* DamageCauser);
|
|
|
|
UFUNCTION(BlueprintCallable, Client, Reliable)
|
|
void Client_HealthFullCannotHeal();
|
|
|
|
public:
|
|
UFUNCTION(BlueprintCallable, BlueprintPure)
|
|
bool CanActivateIronWill() const;
|
|
|
|
|
|
// Fix for true pure virtual functions not being implemented
|
|
};
|
|
|