#include "Killer.h"
#include "UObject/NoExportTypes.h"
#include "EKillerAbilities.h"
#include "EAttackType.h"
#include "EAttackZoneSet.h"
#include "GameplayTagContainer.h"
#include "EKillerCarryAnimWeight.h"
#include "EStunType.h"
#include "Net/UnrealNetwork.h"
#include "KillerSoundCuesComponent.h"
#include "DBDNavModifierComponent.h"
#include "KillerBloodFXComponent.h"
#include "StillnessTrackerComponent.h"
#include "KillerHitsWhileCarryingTrackerComponent.h"
#include "MoriComponent.h"
#include "FinisherMoriHandlerComponent.h"
#include "HitValidatorComponent.h"
#include "HitValidatorConfigurator.h"
#include "DBDAttackerComponent.h"
#include "ArmIKSensorComponent.h"
#include "FirstPersonViewComponent.h"
#include "KillerIntroComponent.h"
#include "KillerBlindingFXComponent.h"
#include "KillerRedStainUpdateStrategy.h"
#include "KillerStunnableComponent.h"

class ASurvivor;
class USceneComponent;
class AActor;
class ADBDPlayer;
class USlasherMovementComponent;
class UChaserCharacterComponent;

bool AKiller::WasRecentlyCloaked() const
{
	return false;
}

void AKiller::UpdateRageTierEffect_Implementation(int32 previousTier, int32 currentTier)
{

}

void AKiller::SpawnSlasherPower_Implementation()
{

}

bool AKiller::ShouldApplyBloodlustSpeedModifier_Implementation() const
{
	return false;
}

void AKiller::SetSurvivorBeingKilled(ASurvivor* survivor)
{

}

void AKiller::SetStalkTierWalkSpeedMultiplier(float stalkTierWalkSpeedMultiplier)
{

}

void AKiller::SetLightIntensity(float intensity)
{

}

void AKiller::SetIsKilling(bool isKilling)
{

}

void AKiller::SetIsHookingSurvivor(const bool value)
{

}

void AKiller::SetIsCloaked(bool isCloaked, bool forced)
{

}

void AKiller::SetCarriedSurvivor(ASurvivor* survivor)
{

}

void AKiller::SetAttackZonePivot(USceneComponent* attackZonePivot)
{

}

void AKiller::Server_SendAttackInput_Implementation(bool pressed)
{

}

void AKiller::Server_SendActionKillerInput_Implementation(bool pressed)
{

}

void AKiller::OnLoudNoiseTriggered(AActor* originator, AActor* instigatingActor, FVector location, bool shouldTrack, float& audibleRange, bool isQuickAction, bool isDeceivingNoise)
{

}

void AKiller::OnLoudNoiseIndicatorDestroyed()
{

}

void AKiller::OnKillerAbilityEndDeactivate_Implementation(EKillerAbilities killerAbility, bool forced)
{

}

void AKiller::OnKillerAbilityEndActivate_Implementation(EKillerAbilities killerAbility)
{

}

void AKiller::OnKillerAbilityBeginDeactivate_Implementation(EKillerAbilities killerAbility, bool forced)
{

}

void AKiller::OnKillerAbilityBeginActivate_Implementation(EKillerAbilities killerAbility)
{

}

void AKiller::OnDropCamperEnd(ADBDPlayer* camper)
{

}

void AKiller::OnAttackStart(const EAttackType attackType)
{

}

void AKiller::OnAttackFinish(const EAttackType attackType)
{

}

void AKiller::Multicast_MergeLockOnDamageZones_Implementation(bool enable)
{

}

void AKiller::Multicast_DisplayAttackZones_Implementation(bool display)
{

}

void AKiller::Multicast_Cheat_SetAttackDetectionZoneSet_Implementation(EAttackZoneSet attackZoneSet)
{

}

bool AKiller::Local_CancelAttack_Implementation()
{
	return false;
}

bool AKiller::IsUncloaking_Implementation() const
{
	return false;
}

bool AKiller::IsStunned() const
{
	return false;
}

bool AKiller::IsKilling() const
{
	return false;
}

bool AKiller::IsInterruptBlocked() const
{
	return false;
}

bool AKiller::IsImmuneToObservingPlayerDetection_Implementation(const ADBDPlayer* observingPlayer) const
{
	return false;
}

bool AKiller::IsIdling()
{
	return false;
}

bool AKiller::IsCrouchAvailable_BP_Implementation()
{
	return false;
}

bool AKiller::IsCloaking_Implementation() const
{
	return false;
}

bool AKiller::IsCarrying() const
{
	return false;
}

bool AKiller::IsAllowedToKill(const ASurvivor* survivor) const
{
	return false;
}

void AKiller::IncrementInterruptBlock()
{

}

bool AKiller::HasPreLevelGenerationModifier(FName modifierID) const
{
	return false;
}

bool AKiller::HasKillerAbility(EKillerAbilities killerAbility) const
{
	return false;
}

ASurvivor* AKiller::GetSurvivorBeingKilled() const
{
	return NULL;
}

float AKiller::GetStealthRatio() const
{
	return 0.0f;
}

float AKiller::GetStalkTierWalkSpeedMultiplier() const
{
	return 0.0f;
}

USlasherMovementComponent* AKiller::GetSlasherMovement() const
{
	return NULL;
}

int32 AKiller::GetRageTier() const
{
	return 0;
}

FGameplayTag AKiller::GetPresenceTag() const
{
	return FGameplayTag{};
}

FVector AKiller::GetPlayerDropOffPoint_Implementation() const
{
	return FVector{};
}

ASurvivor* AKiller::GetObsessionTarget() const
{
	return NULL;
}

FRotator AKiller::GetLookRotation() const
{
	return FRotator{};
}

float AKiller::GetLightIntensity() const
{
	return 0.0f;
}

EKillerCarryAnimWeight AKiller::GetKillerCarryAnimWeight_Implementation() const
{
	return EKillerCarryAnimWeight::Regular;
}

bool AKiller::GetIsAttacking() const
{
	return false;
}

float AKiller::GetCurrentRotationYaw()
{
	return 0.0f;
}

UChaserCharacterComponent* AKiller::GetChaserCharacterComponent() const
{
	return NULL;
}

ASurvivor* AKiller::GetCarriedSurvivor() const
{
	return NULL;
}

float AKiller::GetBlindedPercent() const
{
	return 0.0f;
}

float AKiller::GetAnimDirection() const
{
	return 0.0f;
}

void AKiller::DecrementInterruptBlock()
{

}

void AKiller::DBD_SetAttackZones(EAttackZoneSet attackZoneSet)
{

}

void AKiller::DBD_MergeLockOnDamageZones(bool enable)
{

}

void AKiller::DBD_DisplayAttackZones(bool display)
{

}

void AKiller::DBD_AllowKilling()
{

}

void AKiller::Client_RequestStun_Implementation(EStunType stunType, ADBDPlayer* stunner, float stunQueueTime)
{

}

bool AKiller::CanSlashAttack_BP_Implementation() const
{
	return false;
}

bool AKiller::CanPerformKillerAbility_Implementation(EKillerAbilities killerAbility) const
{
	return false;
}

bool AKiller::CanGainRage_Implementation() const
{
	return false;
}

bool AKiller::CancelAttackByInput()
{
	return false;
}

bool AKiller::CanAttack_BP_Implementation(const EAttackType attackType) const
{
	return false;
}

bool AKiller::CanAttack(const EAttackType attackType) const
{
	return false;
}

bool AKiller::CanAffectLocalPlayer() const
{
	return false;
}

void AKiller::BroadcastOnInstantTeleport()
{

}

void AKiller::Authority_SetInStalkMode(bool stalkMode, bool forced)
{

}

void AKiller::Authority_RequestStun(EStunType stunType, ADBDPlayer* requester, float stunQueueTime)
{

}

void AKiller::Authority_AllowKilling(int32 numKills)
{

}

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

	DOREPLIFETIME(AKiller, _isInStalkMode);
	DOREPLIFETIME(AKiller, _allowedKillCount);
	DOREPLIFETIME(AKiller, _allowedKillAfterStrugglePhase);
	DOREPLIFETIME(AKiller, _cachedBloodlustTier);
	DOREPLIFETIME(AKiller, _killerPowerDebugFlags);
}

AKiller::AKiller()
{
	this->_setFirstPersonModeEnabledOnKillerIntroCompleted = true;
	this->DefaultSlasherPower = NAME_None;
	this->LoudNoiseDisplayTime = 5.000000;
	this->ShouldDisplayAttackZones = false;
	this->CamperExposer = NULL;
	this->KillerSoundCuesComponent = CreateDefaultSubobject<UKillerSoundCuesComponent>(TEXT("Killer Sound Cues Component"));
	this->ShowKillerPowerDebugInfo = false;
	this->_terrorNavModifierComponent = CreateDefaultSubobject<UDBDNavModifierComponent>(TEXT("TerrorNavModifierComponent"));
	this->_bloodFXComponent = CreateDefaultSubobject<UKillerBloodFXComponent>(TEXT("Killer Blood VFX Component"));
	this->_slasherLightIntensity = 1.000000;
	this->_defaultAmountToSquish = 1.000000;
	this->_stillnessTracker = CreateDefaultSubobject<UStillnessTrackerComponent>(TEXT("StillnessTracker"));
	this->CameraSocketName = TEXT("CameraSocket");
	this->_hitsWhileCarryingTracker = CreateDefaultSubobject<UKillerHitsWhileCarryingTrackerComponent>(TEXT("HitsWhileCarryingTracker"));
	this->_stealthIncreaseRate = 0.000000;
	this->_stealthDecreaseRate = 0.000000;
	this->_isKilling = false;
	this->_allowedKillCount = 0;
	this->_allowedKillAfterStrugglePhase = 0;
	this->_cachedBloodlustTier = 0;
	this->_killerPowerDebugFlags = 0;
	this->_enableKillerCrouchInput = false;
	this->_canStartAttackWhileCrouched = false;
	this->_moriComponent = CreateDefaultSubobject<UMoriComponent>(TEXT("MoriComponent"));
	this->_finisherMoriHandlerComponent = CreateDefaultSubobject<UFinisherMoriHandlerComponent>(TEXT("FinisherMoriHandlerComponent"));
	this->_hitValidator = CreateDefaultSubobject<UHitValidatorComponent>(TEXT("Hit Validator"));
	this->_hitValidationConfigurator = CreateDefaultSubobject<UHitValidatorConfigurator>(TEXT("Hit Validator Configurator"));
	this->_attackerComponent = CreateDefaultSubobject<UDBDAttackerComponent>(TEXT("Attacker Component"));
	this->_basicAttackType = EAttackType::VE_Pounce;
	this->_armIKSensorComponent = CreateDefaultSubobject<UArmIKSensorComponent>(TEXT("ArmIKSensor"));
	this->_firstPersonViewComponentClass = UFirstPersonViewComponent::StaticClass();
	this->_killerIntroComponent = CreateDefaultSubobject<UKillerIntroComponent>(TEXT("KillerIntroComponent"));
	this->_blindingFXComponent = CreateDefaultSubobject<UKillerBlindingFXComponent>(TEXT("Blinding FX Component"));
	this->_redStainUpdateStrategy = CreateDefaultSubobject<UKillerRedStainUpdateStrategy>(TEXT("KillerRedStainUpdateStrategy"));
	this->_squishFactorParameter = NAME_None;
	this->_slasherStunnableComponent = CreateDefaultSubobject<UKillerStunnableComponent>(TEXT("SlasherStunnableComponent"));
}
