#pragma once

#include "CoreMinimal.h"
#include "KillerAbilityComponent.h"
#include "Templates/SubclassOf.h"
#include "DreamSnareAbility.generated.h"

class UAuthoritativeActorPoolComponent;
class UStatusEffect;
class USetDreamSnareInteraction;
class USpawnDreamSnareInteraction;
class ADreamSnare;

UCLASS(Blueprintable, Abstract, EditInlineNew, meta=(BlueprintSpawnableComponent))
class THENIGHTMARE_API UDreamSnareAbility : public UKillerAbilityComponent
{
	GENERATED_BODY()

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Export, meta=(AllowPrivateAccess=true))
	UAuthoritativeActorPoolComponent* _dreamSnarePool;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TSubclassOf<UStatusEffect> _dreamSnareStatusEffectClass;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TSubclassOf<USetDreamSnareInteraction> _setDreamSnareInteractionClass;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TSubclassOf<USpawnDreamSnareInteraction> _spawnDreamSnareInteractionClass;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TSubclassOf<ADreamSnare> _dreamSnareClass;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Replicated, Transient, Export, meta=(AllowPrivateAccess=true))
	USetDreamSnareInteraction* _setDreamSnareInteraction;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Replicated, Transient, Export, meta=(AllowPrivateAccess=true))
	USpawnDreamSnareInteraction* _spawnDreamSnareInteraction;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	float _navmeshBoxSizeForDreamSnareMovement;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	float _navmeshMaxHeightDifference;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	float _collisionCheckRadius;

public:
	virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;

public:
	UDreamSnareAbility();
};

FORCEINLINE uint32 GetTypeHash(const UDreamSnareAbility) { return 0; }
