#pragma once

#include "CoreMinimal.h"
#include "DBDAttack.h"
#include "DBDTunableRowHandle.h"
#include "GameplayTagContainer.h"
#include "K41GutsAttack.generated.h"

class UFloatValueStrategy;
class UAkAudioEvent;
class ASurvivor;
class ADBDPlayer;

UCLASS(Blueprintable, meta=(BlueprintSpawnableComponent))
class THEK41_API UK41GutsAttack : public UDBDAttack
{
	GENERATED_BODY()

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FDBDTunableRowHandle _pitchScaleMultiplierValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FDBDTunableRowHandle _pitchScaleAdjustmentTime;

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

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FGameplayTagContainer _damageSurvivorOnHitStateTags;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, meta=(AllowPrivateAccess=true))
	UFloatValueStrategy* _nearMissCollisionLengthScaleMultiplier;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, meta=(AllowPrivateAccess=true))
	UFloatValueStrategy* _nearMissCollisionWidthScaleMultiplier;

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

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	UAkAudioEvent* _attackInjureAudioEvent;

private:
	UFUNCTION(BlueprintCallable, Server, Reliable)
	void Server_CursePlayer(ASurvivor* target, const float targetLocationTimestamp);

	UFUNCTION(BlueprintCallable, Client, Reliable)
	void Client_CursePlayerServerResponse(ADBDPlayer* target, bool isValid);

public:
	UK41GutsAttack();
};

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