#include "KnightGuard.h"
#include "EGuardHuntEndReason.h"
#include "Net/UnrealNetwork.h"
#include "GuardIdleComponent.h"
#include "GuardAttackableComponent.h"
#include "Components/CapsuleComponent.h"
#include "AnimationMontageSlave.h"

class ADBDPlayer;
class AInteractable;
class UGuardPatrolComponent;
class AKiller;

void AKnightGuard::OnRep_IsActive(bool previousIsActive)
{

}

void AKnightGuard::Multicast_OnSurvivorDetected_Implementation(ADBDPlayer* foundSurvivor)
{

}

void AKnightGuard::Multicast_OnPatrolEnded_Implementation(ADBDPlayer* foundSurvivor, float cooldownOverride)
{

}

void AKnightGuard::Multicast_OnOrderEnded_Implementation(AInteractable* target, bool startCooldown)
{

}

void AKnightGuard::Multicast_OnHuntEnded_Implementation(EGuardHuntEndReason reason)
{

}

UGuardPatrolComponent* AKnightGuard::GetPatrolComponent() const
{
	return NULL;
}

AKiller* AKnightGuard::GetOwningKiller() const
{
	return NULL;
}

float AKnightGuard::GetOrderDuration() const
{
	return 0.0f;
}

float AKnightGuard::GetImmediateGeneratorRegressionPercent() const
{
	return 0.0f;
}

float AKnightGuard::GetHuntAuraVisibilityMinDistanceToKiller() const
{
	return 0.0f;
}

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

	DOREPLIFETIME(AKnightGuard, _isActive);
	DOREPLIFETIME(AKnightGuard, _guardFlag);
}

AKnightGuard::AKnightGuard()
{
	this->_guardNoiseEventTimeInterval = 0.500000;
	this->_guardNoiseEventRange = 1600.000000;
	this->_isActive = false;
	this->_flagClass = NULL;
	this->_idleComponent = CreateDefaultSubobject<UGuardIdleComponent>(TEXT("GuardIdleComponent"));
	this->_attackableComponent = CreateDefaultSubobject<UGuardAttackableComponent>(TEXT("GuardAttackableComp"));
	this->_attackableCapsule = CreateDefaultSubobject<UCapsuleComponent>(TEXT("AttackableCapsule"));
	this->_animationFollower = CreateDefaultSubobject<UAnimationMontageSlave>(TEXT("AnimationMontageSlave"));
	this->_guardAnimTag = NAME_None;
}
