#pragma once

#include "CoreMinimal.h"
#include "BasicChargeableInteraction.h"
#include "GameplayTagContainer.h"
#include "UObject/NoExportTypes.h"
#include "Engine/HitResult.h"
#include "KillerProjectileAbilityChargeThrowInteraction.generated.h"

class UCurveFloat;

UCLASS(Blueprintable, Abstract, EditInlineNew, meta=(BlueprintSpawnableComponent))
class DBDGAMEPLAY_API UKillerProjectileAbilityChargeThrowInteraction : public UBasicChargeableInteraction
{
	GENERATED_BODY()

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UCurveFloat* _previewDistanceCurve;

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	int32 _numberOfPointsNeeded;

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

	UPROPERTY(EditAnywhere)
	FGameplayTag _killerProjectileAimStartGameEventTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _killerProjectileAimEndGameEventTag;

protected:
	UFUNCTION(BlueprintImplementableEvent, BlueprintCosmetic)
	void Cosmetic_MakeArcPreview(const TArray<FVector>& points, const FHitResult& hitResult, const bool shouldShowImpactPoint, const float arclengthAtImpactPoint);

public:
	UKillerProjectileAbilityChargeThrowInteraction();
};

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