Newer
Older
SkyFrontier-Project-IADE-UE4-3D / Source / SkyFrontier / Private / HealthSystem.cpp
// Fill out your copyright notice in the Description page of Project Settings.


#include "HealthSystem.h"

UHealthSystem::UHealthSystem()
{
	PrimaryComponentTick.bCanEverTick = false;
	PrimaryComponentTick.bStartWithTickEnabled = false;
}

void UHealthSystem::BeginPlay()
{
	Super::BeginPlay();
	
	Health = MaxHealth;
	Shield = 0;
}

float UHealthSystem::GetHealth() const
{
	return Health;
}

float UHealthSystem::GetMaxHealth() const
{
	return MaxHealth;
}

float UHealthSystem::GetHealthAsPercentage() const
{
	return Health / MaxHealth;
}

float UHealthSystem::GetShield() const
{
	return Shield;
}

void UHealthSystem::ModifyHealth(const float Amount)
{
	if(Amount == 0)
		return;
	
	Health += Amount;

	Amount > 0 ? OnDamageHealedEvent.Broadcast(Amount) : OnDamageTakenEvent.Broadcast(Amount);
}

void UHealthSystem::TakeDamage(const float Amount)
{
	if(Amount > 0)
	{
		Health -= Amount;

		OnDamageTakenEvent.Broadcast(Amount);
	}
}
 
void UHealthSystem::RecoverHealth(const float Amount)
{
	if(Amount > 0)
	{
		Health += Amount;
		if (Health >= MaxHealth)
		{
			Health = MaxHealth;
		}
		
		OnDamageHealedEvent.Broadcast(Amount);
	}
}

void UHealthSystem::ReceiveShield(const float Amount)
{
	if(Amount >= 0)
	{
		Shield += Amount;
	
		OnShieldReceiveEvent.Broadcast(Amount);
	}
}

void UHealthSystem::RemoveShield(const float Amount)
{
	if(Amount >= 0)
	{
		Shield -= Amount;
		
		if (Shield < 0)
		{
			Shield = 0;
		}
		OnShieldReceiveEvent.Broadcast(Amount);
	}
}