#pragma once

#include "CoreMinimal.h"
#include "BaseSurvivorAnimInstance.h"
#include "GameplayTagContainer.h"
#include "FallSurvivorSubAnimInstance.generated.h"

class UAnimSequence;
class UBlendSpace1D;

UCLASS(Blueprintable, NonTransient)
class DBDANIMATION_API UFallSurvivorSubAnimInstance : public UBaseSurvivorAnimInstance
{
	GENERATED_BODY()

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _dropStaggerTimeLeft;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _maxSpeed;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _speed;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _inAir;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _isCrawling;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asCrawlToFallTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asFallToCrawlTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asFallHardLoopTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asFallHardInTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asFallTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asWalkToFallTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _bsHardLandOutTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _bsLandTag;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asCrawlToFall;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asFallToCrawl;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asFallHardLoop;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asFallHardIn;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asFall;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asWalkToFall;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UBlendSpace1D* _bsHardLandOut;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UBlendSpace1D* _bsLand;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool _walkToFallToFallToLandRule;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool _walkToFallToLandSoftRule;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool _fallToFallToLandRule;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool _fallToLandSoftRule;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool _landSoftToBaseRule;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool _fallToLandToLandHardOutRule;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool _landHardToLandHardOutRule;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool _landHardOutToBaseRule;

public:
	UFallSurvivorSubAnimInstance();
};

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