#include "FuelGenerator.h"
#include "OnAkPostEventCallback.h"
#include "AnimationMontageDescriptor.h"
#include "EGeneratorInteractableZone.h"
#include "Net/UnrealNetwork.h"
#include "GeneratorDamageComponent.h"
#include "ChargeableComponent.h"
#include "DBDSkeletalMeshComponentBudgeted.h"
#include "Components/ChildActorComponent.h"
#include "AkComponent.h"
#include "DBDOutlineComponent.h"
#include "FuelGeneratorOutlineUpdateStrategy.h"
#include "Perception/AIPerceptionStimuliSourceComponent.h"
#include "DischargeUntilThresholdIsReachedComponent.h"
#include "MontagePlayer.h"
#include "AnimationMontageSlave.h"

class AActor;
class UAkAudioEvent;
class ADBDPlayer;
class UObject;

void AFuelGenerator::TriggerLoudNoiseIfNeeded(AActor* noiseInstigator) const
{

}

void AFuelGenerator::StopDischarge()
{

}

void AFuelGenerator::SetIsAutoCompleted(const bool isAutoCompleted)
{

}

int32 AFuelGenerator::PostAkEvent(UAkAudioEvent* akEvent, int32 callbackMask, const FOnAkPostEventCallback& postEventCallback)
{
	return 0;
}

void AFuelGenerator::OnRep_IsBlocked()
{

}

void AFuelGenerator::OnRegressionStateChanged(const bool regressing, ADBDPlayer* lastDamageChangeSource)
{

}

void AFuelGenerator::OnGeneratorBlockMontageEnded(const FAnimationMontageDescriptor animMontageID, bool interrupted)
{

}

void AFuelGenerator::OnEscapeDoorActivated()
{

}

void AFuelGenerator::OnChargeChanged(UChargeableComponent* chargeableComponent, float percent)
{

}

void AFuelGenerator::Multicast_SetRepairInteractionsObstructed_Implementation(const TArray<EGeneratorInteractableZone>& interactorZonesBlocked)
{

}

void AFuelGenerator::Multicast_OnRepaired_Implementation(const bool showGeneratorCloneLoudNoise, const bool isAutoCompleted, const int32 updatedRemainingGeneratorCount)
{

}

void AFuelGenerator::Multicast_BlockGenerator_Implementation(const TArray<ADBDPlayer*>& repairers)
{

}

bool AFuelGenerator::IsBeingDamagedByKiller() const
{
	return false;
}

bool AFuelGenerator::GetIsAutoCompleted() const
{
	return false;
}

UChargeableComponent* AFuelGenerator::GetGeneratorChargeComponent() const
{
	return NULL;
}

float AFuelGenerator::GetChargePercentComplete() const
{
	return 0.0f;
}

void AFuelGenerator::Authority_SetRepaired(const bool showGeneratorCloneLoudNoise, const bool isAutoCompleted)
{

}

void AFuelGenerator::Authority_RepairDamage(ADBDPlayer* repairedBy)
{

}

void AFuelGenerator::Authority_OnChargeChanged(UChargeableComponent* chargeableComponent, float percentCompletionChange, float totalPercentComplete)
{

}

void AFuelGenerator::Authority_AddBlockingSource(const UObject* source)
{

}

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

	DOREPLIFETIME(AFuelGenerator, _isBlocked);
}

AFuelGenerator::AFuelGenerator()
{
	this->WasASMCachePreWarmTriggered = false;
	this->_generatorDamageComponent = CreateDefaultSubobject<UGeneratorDamageComponent>(TEXT("GeneratorDamageComponent"));
	this->_generatorCharge = CreateDefaultSubobject<UChargeableComponent>(TEXT("GeneratorCharge"));
	this->_damageCharge = CreateDefaultSubobject<UChargeableComponent>(TEXT("DamageCharge"));
	this->_skeletalMeshComponent = CreateDefaultSubobject<UDBDSkeletalMeshComponentBudgeted>(TEXT("SkeletalMeshComponent"));
	this->_entity = CreateDefaultSubobject<UChildActorComponent>(TEXT("Entity"));
	this->_akComponent = CreateDefaultSubobject<UAkComponent>(TEXT("AkComponent"));
	this->_outlineComponent = CreateDefaultSubobject<UDBDOutlineComponent>(TEXT("OutlineComponent"));
	this->_fuelGeneratorOutlineUpdateStrategy = CreateDefaultSubobject<UFuelGeneratorOutlineUpdateStrategy>(TEXT("FuelGeneratorOutlineUpdateStrategy"));
	this->FireLevelScoreEventOnFix = false;
	this->_perceptionStimuliComponent = CreateDefaultSubobject<UAIPerceptionStimuliSourceComponent>(TEXT("AIPerceptionStimuliSourceComponent"));
	this->_regressChargeUntilThresholdIsReached = CreateDefaultSubobject<UDischargeUntilThresholdIsReachedComponent>(TEXT("RegressChargeUntilThresholdIsReached"));
	this->_montagePlayer = CreateDefaultSubobject<UMontagePlayer>(TEXT("MontagePlayer"));
	this->_montageFollower = CreateDefaultSubobject<UAnimationMontageSlave>(TEXT("MontageFollower"));
	this->_hasRegressChargesThreshold = true;
	this->_isAutoCompleted = false;
	this->_entityGeneratorBlockMontageDescriptorID = NAME_None;
	this->_isBlocked = false;
	this->_VFX_LightDistanceDefault = 350.000000;
	this->_activated = false;
}
