#include "HealthComponent.h"
#include "EImmobilizedState.h"
#include "EHealthType.h"
#include "EHealthState.h"
#include "HealResult.h"
#include "Net/UnrealNetwork.h"

class ADBDPlayer;
class ASurvivor;
class UGameplayModifierContainer;
class UChargeableComponent;
class AActor;
class ACharacter;

void UHealthComponent::SetCanBleedout(bool canBleedout)
{

}

void UHealthComponent::OnRep_IsInjuredBleedOutPaused()
{

}

void UHealthComponent::OnRep_InInjuredBleedOut()
{

}

void UHealthComponent::OnImmobilizedStateChanged(const EImmobilizedState oldImmobilizeState, const EImmobilizedState newImmobilizeState)
{

}

void UHealthComponent::Multicast_SurvivorDowned_Implementation(ADBDPlayer* killer, ASurvivor* survivor)
{

}

void UHealthComponent::Multicast_StartInjuredBleedout_Implementation(ADBDPlayer* killer, UGameplayModifierContainer* container)
{

}

void UHealthComponent::Multicast_SetHealthType_Implementation(EHealthType healthType)
{

}

void UHealthComponent::Multicast_SetHealthStateCountFromHealthState_Implementation(EHealthState healthState, bool fireScoreEvent)
{

}

void UHealthComponent::Multicast_SetHealthState_Implementation(EHealthState healthState, bool fireScoreEvent, bool sacrificed)
{

}

void UHealthComponent::Multicast_SetCurrentHealthStateCount_Implementation(int32 newHealth, bool fireScoreEvent)
{

}

void UHealthComponent::Multicast_OnSurvivorGainedHealthStateByOthersEvents_Implementation(const bool healedFromKO, ADBDPlayer* healedSurvivor, const TArray<ADBDPlayer*>& healers, const TArray<bool>& healedSurvivorFarEnoughAway)
{

}

void UHealthComponent::Multicast_OnInjuredBleedoutKO_Implementation(ADBDPlayer* injuredBleedoutInstigator)
{

}

void UHealthComponent::Multicast_OnHealed_Implementation(const FHealResult& healResult)
{

}

bool UHealthComponent::IsKO() const
{
	return false;
}

bool UHealthComponent::IsInjuredBleedoutTimerExpired() const
{
	return false;
}

bool UHealthComponent::IsInjured() const
{
	return false;
}

bool UHealthComponent::IsInInjuredBleedout() const
{
	return false;
}

bool UHealthComponent::IsHealthy() const
{
	return false;
}

bool UHealthComponent::IsDyingTimerExpired() const
{
	return false;
}

bool UHealthComponent::IsDead() const
{
	return false;
}

float UHealthComponent::GetPercentInjuredBleedoutTimer() const
{
	return 0.0f;
}

float UHealthComponent::GetPercentDyingTimer() const
{
	return 0.0f;
}

EHealthState UHealthComponent::GetDamageState() const
{
	return EHealthState::VE_Healthy;
}

float UHealthComponent::GetCurrentTotalHealthBarPercent() const
{
	return 0.0f;
}

UChargeableComponent* UHealthComponent::GetCurrentHPSlot()
{
	return NULL;
}

bool UHealthComponent::CanHealSelf() const
{
	return false;
}

bool UHealthComponent::CanBeHealedFromInjured() const
{
	return false;
}

bool UHealthComponent::CanBeHealed() const
{
	return false;
}

bool UHealthComponent::CanBecomeHealthy() const
{
	return false;
}

void UHealthComponent::Authority_SetDamageState(EHealthState damageState, bool fireScoreEvent, bool sacrificed)
{

}

void UHealthComponent::Authority_OnSurvivorRemoved(ASurvivor* survivor)
{

}

void UHealthComponent::Authority_OnMendChargeCompletionStateChanged(bool complete, const TArray<AActor*>& instigators)
{

}

void UHealthComponent::Authority_OnHealthBarCharged(bool complete, const TArray<AActor*>& instigators)
{

}

void UHealthComponent::Authority_OnHealChargeChange(UChargeableComponent* chargeableComponent, float percentCompletionChange, float totalPercentComplete)
{

}

void UHealthComponent::Authority_MendTryGrantScoresOnChargeApplied(float individualChargeAmount, float totalChargeAmount, AActor* chargeInstigator, bool wasCoop, float deltaTime)
{

}

void UHealthComponent::Authority_HealTryGrantScoresOnChargeApplied(float individualChargeAmount, float totalChargeAmount, AActor* chargeInstigator, bool wasCoop, float deltaTime)
{

}

void UHealthComponent::Authority_EndInjuredBleedout()
{

}

void UHealthComponent::Authority_ApplyDoubleDamage(AActor* damageSource, ACharacter* damagePlayerOwner)
{

}

void UHealthComponent::Authority_ApplyDeepWound(AActor* damageSource, ACharacter* damagePlayerOwner)
{

}

void UHealthComponent::Authority_ApplyDamage(AActor* damageSource, ACharacter* damagePlayerOwner, bool bypassInjuredBleedout)
{

}

void UHealthComponent::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);

	DOREPLIFETIME(UHealthComponent, _inInjuredBleedOut);
	DOREPLIFETIME(UHealthComponent, _isInjuredBleedOutPaused);
	DOREPLIFETIME(UHealthComponent, _isKOByInjuredBleedout);
	DOREPLIFETIME(UHealthComponent, _bleedOutTimer);
	DOREPLIFETIME(UHealthComponent, _numHealthyHeals);
	DOREPLIFETIME(UHealthComponent, _dyingTimer);
}

UHealthComponent::UHealthComponent()
{
	this->_isInjuredBleedOutPaused = false;
	this->_isKOByInjuredBleedout = false;
	this->_canBleedout = true;
	this->_currentHealthStateCount = 2;
	this->_numHealthyHeals = 0;
}
