#include "K37ScentTrailParticle.h"
#include "Engine/HitResult.h"
#include "Net/UnrealNetwork.h"
#include "Components/SceneComponent.h"
#include "Components/StaticMeshComponent.h"
#include "Components/SphereComponent.h"
#include "DBDOutlineComponent.h"
#include "K37ScentTrailParticleOutlineUpdateStrategy.h"
#include "AuthoritativePoolableActorComponent.h"

class UPrimitiveComponent;
class AActor;

void AK37ScentTrailParticle::OnScentTrailParticleAcquiredChanged(const bool isAcquired)
{

}

void AK37ScentTrailParticle::OnScentParticleCollisionZoneOverlapped(UPrimitiveComponent* overlappedComponent, AActor* otherActor, UPrimitiveComponent* otherComp, int32 otherBodyIndex, bool bFromSweep, const FHitResult& sweepResult)
{

}

void AK37ScentTrailParticle::OnRep_SpawningData()
{

}

void AK37ScentTrailParticle::OnRep_LifetimeTimer()
{

}

float AK37ScentTrailParticle::GetScentTrailAngle()
{
	return 0.0f;
}

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

	DOREPLIFETIME(AK37ScentTrailParticle, _spawningData);
	DOREPLIFETIME(AK37ScentTrailParticle, _isCollected);
	DOREPLIFETIME(AK37ScentTrailParticle, _owningWolfAbility);
	DOREPLIFETIME(AK37ScentTrailParticle, _owningSurvivor);
	DOREPLIFETIME(AK37ScentTrailParticle, _lifetimeTimer);
}

AK37ScentTrailParticle::AK37ScentTrailParticle()
{
	this->_rootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
	this->_staticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
	this->_particleCollectionZone = CreateDefaultSubobject<USphereComponent>(TEXT("ParticleCollectionZone"));
	this->_outlineComponent = CreateDefaultSubobject<UDBDOutlineComponent>(TEXT("OutlineComponent"));
	this->_outlineUpdateStrategy = CreateDefaultSubobject<UK37ScentTrailParticleOutlineUpdateStrategy>(TEXT("OutlineUpdateStrategy"));
	this->_authoritativePoolableActorComponent = CreateDefaultSubobject<UAuthoritativePoolableActorComponent>(TEXT("PoolableActorComponent"));
	this->_isCollected = false;
}
