Add Regen Health After 5 Seconds for Placeholder Regen

This commit is contained in:
Philip W 2023-11-09 12:25:49 +00:00
parent b0229af645
commit 9f931693b2
3 changed files with 60 additions and 28 deletions

View File

@ -17,11 +17,11 @@ public:
// Sets default values for this character's properties // Sets default values for this character's properties
AAICharacter(); AAICharacter();
UPROPERTY(EditDefaultsOnly, Category = "Stats") UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Stats")
float CurrentHealth = 100.0f; float CurrentHealth = 100.0f;
UPROPERTY(EditDefaultsOnly, Category = "Stats") UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
float MaxHealth = 100.0f; float MaxHealth = 100.0f;
UPROPERTY(EditDefaultsOnly, Category = "Stats") UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
float DefaultHealth = 100.0f; float DefaultHealth = 100.0f;
UPROPERTY(EditDefaultsOnly, Category = "Profile") UPROPERTY(EditDefaultsOnly, Category = "Profile")

View File

@ -8,6 +8,7 @@
#include "EnhancedInputSubsystems.h" #include "EnhancedInputSubsystems.h"
#include "InteractionInterface.h" #include "InteractionInterface.h"
#include "AI/EnemyCharacter.h" #include "AI/EnemyCharacter.h"
#include "Engine/DamageEvents.h"
#include "GameFramework/CharacterMovementComponent.h" #include "GameFramework/CharacterMovementComponent.h"
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
#include "GameFramework/MovementComponent.h" #include "GameFramework/MovementComponent.h"
@ -84,6 +85,21 @@ void AEndlessVendettaCharacter::Tick(float DeltaTime)
} }
} }
void AEndlessVendettaCharacter::RegenHealth()
{
Heal(10);
if (GetWorld()->GetTimerManager().GetTimerRate(RegenHealthTimerHandle) > 1.0f)
{
GetWorld()->GetTimerManager().SetTimer(RegenHealthTimerHandle, this, &AEndlessVendettaCharacter::RegenHealth, 1.0f, true);
}
if (CurrentHealth >= MaxHealth) GetWorld()->GetTimerManager().ClearTimer(RegenHealthTimerHandle);
}
void AEndlessVendettaCharacter::Heal(const float Amount)
{
CurrentHealth += FMath::Clamp(Amount, 0, MaxHealth);
}
void AEndlessVendettaCharacter::WeaponPickUpSystem() void AEndlessVendettaCharacter::WeaponPickUpSystem()
{ {
FHitResult OutHit; FHitResult OutHit;
@ -150,11 +166,11 @@ void AEndlessVendettaCharacter::Interact()
QueryParams.AddIgnoredActor(this); QueryParams.AddIgnoredActor(this);
FVector LT_Start = FirstPersonCameraComponent->GetComponentLocation(); FVector LT_Start = FirstPersonCameraComponent->GetComponentLocation();
FVector LT_End = LT_Start + (FirstPersonCameraComponent->GetForwardVector() * InteractionRange); FVector LT_End = LT_Start + (FirstPersonCameraComponent->GetForwardVector() * InteractionRange);
if(IsValid(PrimaryWeapon)) if (IsValid(PrimaryWeapon))
{ {
QueryParams.AddIgnoredActor(PrimaryWeapon); QueryParams.AddIgnoredActor(PrimaryWeapon);
} }
if(IsValid(SecondaryWeapon)) if (IsValid(SecondaryWeapon))
{ {
QueryParams.AddIgnoredActor(SecondaryWeapon); QueryParams.AddIgnoredActor(SecondaryWeapon);
} }
@ -183,6 +199,12 @@ float AEndlessVendettaCharacter::TakeDamage(const float DamageAmount, FDamageEve
{ {
CurrentHealth = 0; CurrentHealth = 0;
UE_LOG(LogTemp, Warning, TEXT("Player is dead")); UE_LOG(LogTemp, Warning, TEXT("Player is dead"));
UGameplayStatics::OpenLevel(this, FName(*GetWorld()->GetName()), false);
}
if (!GetWorld()->GetTimerManager().IsTimerActive(RegenHealthTimerHandle))
{
GetWorld()->GetTimerManager().ClearTimer(RegenHealthTimerHandle);
GetWorld()->GetTimerManager().SetTimer(RegenHealthTimerHandle, this, &AEndlessVendettaCharacter::RegenHealth, 5.0f, true);
} }
return Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser); return Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);
@ -213,7 +235,7 @@ void AEndlessVendettaCharacter::ToggleRecon()
void AEndlessVendettaCharacter::ToggleCombat() void AEndlessVendettaCharacter::ToggleCombat()
{ {
if(!GadgetManager->IsValidCombatGadget()) return; if (!GadgetManager->IsValidCombatGadget()) return;
if (IsValid(PrimaryWeapon)) EquipPrimary(); if (IsValid(PrimaryWeapon)) EquipPrimary();
if (IsValid(SecondaryWeapon)) EquipSecondary(); if (IsValid(SecondaryWeapon)) EquipSecondary();
@ -310,14 +332,14 @@ void AEndlessVendettaCharacter::WeaponSwitcher(AActor* Outhit)
//Calls the fire function in the baseWeaponClass //Calls the fire function in the baseWeaponClass
void AEndlessVendettaCharacter::FireCaller() void AEndlessVendettaCharacter::FireCaller()
{ {
if (IsValid(PrimaryWeapon) && !bIsReloading) if (IsValid(PrimaryWeapon) && !bIsReloading)
{ {
PrimaryWeapon->Fire(); PrimaryWeapon->Fire();
} }
if (IsValid(SecondaryWeapon) && !bIsReloading) if (IsValid(SecondaryWeapon) && !bIsReloading)
{ {
SecondaryWeapon->Fire(); SecondaryWeapon->Fire();
} }
} }
void AEndlessVendettaCharacter::StopFire() void AEndlessVendettaCharacter::StopFire()
@ -368,14 +390,14 @@ void AEndlessVendettaCharacter::StopGunRightClick()
{ {
bIsScoped = false; bIsScoped = false;
PrimaryWeapon->WeaponScopedFire(); PrimaryWeapon->WeaponScopedFire();
PrimaryWeapon->SetActorRelativeLocation(FVector(0,0,0)); PrimaryWeapon->SetActorRelativeLocation(FVector(0, 0, 0));
this->GetFirstPersonCameraComponent()->SetFieldOfView(90); this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
} }
if (IsValid(SecondaryWeapon)) if (IsValid(SecondaryWeapon))
{ {
bIsScoped = false; bIsScoped = false;
SecondaryWeapon->WeaponScopedFire(); SecondaryWeapon->WeaponScopedFire();
SecondaryWeapon->SetActorRelativeLocation(FVector(0,0,0)); SecondaryWeapon->SetActorRelativeLocation(FVector(0, 0, 0));
this->GetFirstPersonCameraComponent()->SetFieldOfView(90); this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
} }
} }
@ -395,6 +417,11 @@ void AEndlessVendettaCharacter::GunReload()
} }
void AEndlessVendettaCharacter::DamagePlayer(const float Damage)
{
TakeDamage(Damage, FDamageEvent(), nullptr, nullptr);
}
void AEndlessVendettaCharacter::Move(const FInputActionValue& Value) void AEndlessVendettaCharacter::Move(const FInputActionValue& Value)
{ {
// input is a Vector2D // input is a Vector2D
@ -444,4 +471,3 @@ bool AEndlessVendettaCharacter::UpdateGadgetType(TSubclassOf<AGadgetBase> NewGad
} }
return true; return true;
} }

View File

@ -74,11 +74,11 @@ class AEndlessVendettaCharacter : public ACharacter
public: public:
AEndlessVendettaCharacter(); AEndlessVendettaCharacter();
UPROPERTY(EditDefaultsOnly, Category = "Stats") UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Stats")
float CurrentHealth = 100.0f; float CurrentHealth = 100.0f;
UPROPERTY(EditDefaultsOnly, Category = "Stats") UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
float MaxHealth = 100.0f; float MaxHealth = 100.0f;
UPROPERTY(EditDefaultsOnly, Category = "Stats") UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
float DefaultHealth = 100.0f; float DefaultHealth = 100.0f;
protected: protected:
@ -88,6 +88,9 @@ protected:
UPROPERTY(EditDefaultsOnly, Category = "Gadget") UPROPERTY(EditDefaultsOnly, Category = "Gadget")
TSubclassOf<AGadgetManager> GadgetManagerClass; TSubclassOf<AGadgetManager> GadgetManagerClass;
void RegenHealth();
FTimerHandle RegenHealthTimerHandle;
void Heal(const float Amount);
public: public:
int Money = 2000; int Money = 2000;
@ -143,6 +146,9 @@ public:
UPROPERTY(EditAnywhere, Category = "Dont Touch") UPROPERTY(EditAnywhere, Category = "Dont Touch")
bool bIsScoped; bool bIsScoped;
UFUNCTION(Exec)
void DamagePlayer(const float Damage);
protected: protected:
/** Called for movement input */ /** Called for movement input */
void Move(const FInputActionValue& Value); void Move(const FInputActionValue& Value);