#pragma once

#include "CoreMinimal.h"
#include "KillerAbilityData.h"
#include "GameplayTagContainer.h"
#include "DBDTunableRowHandle.h"
#include "CurseAbilityModificationEventData.h"
#include "CurseAbilityRangeStateData.h"
#include "CurseAbilityData.generated.h"

class UFloatValueStrategy;
class UAkAudioEvent;

UCLASS(Blueprintable)
class DBDKILLERABILITIES_API UCurseAbilityData : public UKillerAbilityData
{
	GENERATED_BODY()

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, meta=(AllowPrivateAccess=true))
	UFloatValueStrategy* _survivorInitialPassiveCurseValue;

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

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

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

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	bool _requiresDischargeOfStackToRemove;

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

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

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TArray<FCurseAbilityModificationEventData> _survivorCurseEventsData;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TArray<FCurseAbilityRangeStateData> _survivorStateTagsApplicationData;

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

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

public:
	UCurseAbilityData();
};

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