#pragma once

#include "CoreMinimal.h"
#include "DynamicAccessoryAnimInstance.h"
#include "UObject/NoExportTypes.h"
#include "EK39TentacleSwingResult.h"
#include "EAttackSubstate.h"
#include "GameplayTagContainer.h"
#include "K39TentacleAnimInstance.generated.h"

class AKiller;
class AK39TentaclesActor;

UCLASS(Blueprintable, NonTransient)
class THEK39_API UK39TentacleAnimInstance : public UDynamicAccessoryAnimInstance
{
	GENERATED_BODY()

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	AKiller* _owningKiller;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	AK39TentaclesActor* _tentaclesActor;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isLevelReadyToPlay;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isIntroComplete;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isMoving;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isLaunchingTentacle;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isBeingPulled;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	FVector _hitLocationTop;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	FVector _hitLocationBot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	EK39TentacleSwingResult _tentacleSwingResult;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _firstPersonView;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isInAir;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	float _forwardVelocity;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	float _lateralVelocity;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isCarrying;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	EAttackSubstate _attackState;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isChargingSwing;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isInPowerMode;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _canLaunchSwing;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _useBottomTentacles;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _canAttack;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	float _tentacleDistanceTop;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	float _tentacleDistanceBot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isStunned;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isNearHitLocation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _isNearHitLocationThreshold;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _hitLocationLingeringDuration;

	UPROPERTY(EditAnywhere)
	FGameplayTagQuery _canLaunchSwingQuery;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isSliding;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isObstructed;

public:
	UFUNCTION(BlueprintCallable)
	void OnLevelReadyToPlay();

	UFUNCTION(BlueprintCallable)
	void OnIntroCompleted();

public:
	UK39TentacleAnimInstance();
};

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