#pragma once

#include "CoreMinimal.h"
#include "ChargeableInteractionDefinition.h"
#include "Templates/SubclassOf.h"
#include "DemogorgonPounceInteraction.generated.h"

class UStatusEffect;
class UChargedAttackStateComponent;
class AKiller;

UCLASS(Blueprintable, EditInlineNew, meta=(BlueprintSpawnableComponent))
class UDemogorgonPounceInteraction : public UChargeableInteractionDefinition
{
	GENERATED_BODY()

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TSubclassOf<UStatusEffect> _demogorgonPounceFOVStatusEffectClass;

	UPROPERTY(BlueprintReadWrite, Transient, Instanced, meta=(AllowPrivateAccess=true))
	UChargedAttackStateComponent* _chargedAttackState;

	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	AKiller* _killer;

protected:
	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void TriggerHuntingAudioEvent(bool isHunting);

	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void TriggerChargeCancelAudioEvent();

private:
	UFUNCTION(BlueprintCallable, Server, Reliable)
	void Server_InformQatarDashTriggered();

protected:
	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void OnChargedAttackReadyChanged(bool ready);

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void OnCancelCooldownComplete();

public:
	UDemogorgonPounceInteraction();
};

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