#pragma once

#include "CoreMinimal.h"
#include "ProjectilePreviewLaunchDataInterface.h"
#include "BaseProjectileLauncher.h"
#include "SnowballProjectileLaunchSettings.h"
#include "UObject/NoExportTypes.h"
#include "GameplayTagContainer.h"
#include "SnowballProjectileLauncher.generated.h"

class UCurveFloat;

UCLASS(Blueprintable, EditInlineNew, meta=(BlueprintSpawnableComponent))
class WINTEREVENT2023_API USnowballProjectileLauncher : public UBaseProjectileLauncher, public IProjectilePreviewLaunchDataInterface
{
	GENERATED_BODY()

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FSnowballProjectileLaunchSettings> _launchSettings;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRotator _angleOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UCurveFloat* _snowballPitchCurve;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _survivorLaunchPositionOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _killerLaunchPositionOffset;

	UPROPERTY(EditAnywhere)
	TMap<FGameplayTag, FVector> _customKillerLaunchOffsetMap;

	UPROPERTY(EditAnywhere)
	TMap<FGameplayTag, FName> _customKillerBoneName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _snowballLaunchPitchMin;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _snowballLaunchPitchMax;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _snowballCollisionRadiusForPreview;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _characterBoneNameCamper;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _characterBoneNameSlasher;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _numChargesToUse;

public:
	USnowballProjectileLauncher();
};

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