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
AAICharacter();
UPROPERTY(EditDefaultsOnly, Category = "Stats")
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Stats")
float CurrentHealth = 100.0f;
UPROPERTY(EditDefaultsOnly, Category = "Stats")
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
float MaxHealth = 100.0f;
UPROPERTY(EditDefaultsOnly, Category = "Stats")
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
float DefaultHealth = 100.0f;
UPROPERTY(EditDefaultsOnly, Category = "Profile")

View File

@ -8,6 +8,7 @@
#include "EnhancedInputSubsystems.h"
#include "InteractionInterface.h"
#include "AI/EnemyCharacter.h"
#include "Engine/DamageEvents.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "Kismet/GameplayStatics.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()
{
FHitResult OutHit;
@ -150,11 +166,11 @@ void AEndlessVendettaCharacter::Interact()
QueryParams.AddIgnoredActor(this);
FVector LT_Start = FirstPersonCameraComponent->GetComponentLocation();
FVector LT_End = LT_Start + (FirstPersonCameraComponent->GetForwardVector() * InteractionRange);
if(IsValid(PrimaryWeapon))
if (IsValid(PrimaryWeapon))
{
QueryParams.AddIgnoredActor(PrimaryWeapon);
}
if(IsValid(SecondaryWeapon))
if (IsValid(SecondaryWeapon))
{
QueryParams.AddIgnoredActor(SecondaryWeapon);
}
@ -183,6 +199,12 @@ float AEndlessVendettaCharacter::TakeDamage(const float DamageAmount, FDamageEve
{
CurrentHealth = 0;
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);
@ -213,7 +235,7 @@ void AEndlessVendettaCharacter::ToggleRecon()
void AEndlessVendettaCharacter::ToggleCombat()
{
if(!GadgetManager->IsValidCombatGadget()) return;
if (!GadgetManager->IsValidCombatGadget()) return;
if (IsValid(PrimaryWeapon)) EquipPrimary();
if (IsValid(SecondaryWeapon)) EquipSecondary();
@ -368,14 +390,14 @@ void AEndlessVendettaCharacter::StopGunRightClick()
{
bIsScoped = false;
PrimaryWeapon->WeaponScopedFire();
PrimaryWeapon->SetActorRelativeLocation(FVector(0,0,0));
PrimaryWeapon->SetActorRelativeLocation(FVector(0, 0, 0));
this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
}
if (IsValid(SecondaryWeapon))
{
bIsScoped = false;
SecondaryWeapon->WeaponScopedFire();
SecondaryWeapon->SetActorRelativeLocation(FVector(0,0,0));
SecondaryWeapon->SetActorRelativeLocation(FVector(0, 0, 0));
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)
{
// input is a Vector2D
@ -444,4 +471,3 @@ bool AEndlessVendettaCharacter::UpdateGadgetType(TSubclassOf<AGadgetBase> NewGad
}
return true;
}

View File

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