#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "GameplayTagContainer.h"
#include "Templates/SubclassOf.h"
#include "KillerFilterItem.h"
#include "UObject/SoftObjectPtr.h"
#include "AdditionalDynamicSubtree.h"
#include "AISkillContextWeights.h"
#include "AISkill.generated.h"

class UNavigationQueryFilter;
class UAISenseConfig;
class UBehaviorTree;
class ADBDAIBTController;

UCLASS(Blueprintable, Abstract, EditInlineNew)
class DBDBOTS_API UAISkill : public UObject
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FGameplayTagContainer RunContexts;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool StopIfPausedByNavLinkProxy;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float RunTimeLimit;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float RunCooldownTime;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float RunCooldownTimeDeviation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSubclassOf<UNavigationQueryFilter> SkillNavigationFilterClass;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	TArray<UAISenseConfig*> SkillSenseConfigs;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FKillerFilterItem> KillerFilter;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UBehaviorTree> DynamicSubtree;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FAdditionalDynamicSubtree> AdditionalDynamicSubtrees;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FAISkillContextWeights> ContextWeights;

protected:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	TArray<UObject*> _pausedByObjects;

private:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	ADBDAIBTController* _aiControllerOwner;

public:
	UAISkill();
};

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