#include "K28Remnant.h"
#include "UObject/NoExportTypes.h"
#include "Engine/HitResult.h"
#include "Net/UnrealNetwork.h"
#include "DBDSkeletalMeshComponentBudgeted.h"
#include "Components/CapsuleComponent.h"
#include "AnimationMontageSlave.h"
#include "MontagePlayer.h"
#include "DBDOutlineComponent.h"
#include "K28RemnantOutlineUpdateStrategy.h"
#include "Perception/AIPerceptionStimuliSourceComponent.h"

class AKiller;
class ASurvivor;
class UPrimitiveComponent;
class AActor;

void AK28Remnant::OnRep_RemnantState()
{

}

void AK28Remnant::Multicast_TriggerTeleportStart_Implementation(AKiller* killer)
{

}

void AK28Remnant::Multicast_TeleportToRemnant_Implementation(AKiller* killer, const FRotator& teleportRotation, bool isAnimationSlowed)
{

}

void AK28Remnant::Multicast_SurvivorDestroyedRemnant_Implementation(ASurvivor* survivor)
{

}

void AK28Remnant::Multicast_DeactivateRemnant_Implementation()
{

}

void AK28Remnant::Multicast_ActivateRemnant_Implementation(const FVector& location, const FRotator& rotation)
{

}

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

void AK28Remnant::Authority_OnCollisionDetected(UPrimitiveComponent* hitComponent, AActor* otherActor, UPrimitiveComponent* otherComp, int32 otherBodyIndex, bool bFromSweep, const FHitResult& sweepResult)
{

}

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

	DOREPLIFETIME(AK28Remnant, _remnantState);
}

AK28Remnant::AK28Remnant()
{
	this->_skeletalMesh = CreateDefaultSubobject<UDBDSkeletalMeshComponentBudgeted>(TEXT("CharacterMesh0"));
	this->_capsuleComponent = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CollisionCylinder"));
	this->_montageFollower = CreateDefaultSubobject<UAnimationMontageSlave>(TEXT("MontageSlave"));
	this->_montagePlayer = CreateDefaultSubobject<UMontagePlayer>(TEXT("AnimMontagePlayer"));
	this->_outlineComponent = CreateDefaultSubobject<UDBDOutlineComponent>(TEXT("Outline Component"));
	this->_remnantOutlineStrategy = CreateDefaultSubobject<UK28RemnantOutlineUpdateStrategy>(TEXT("Outline Strategy"));
	this->_renmantDeactivationTime = 1.000000;
	this->_remnantDestructionTime = 1.000000;
	this->_remnantState = EK28RemnantState::Inactive;
	this->_perceptionStimuliComponent = CreateDefaultSubobject<UAIPerceptionStimuliSourceComponent>(TEXT("AIPerceptionStimuliSourceComponent"));
}
