#pragma once

#include "CoreMinimal.h"
#include "BaseSurvivorAnimInstance.h"
#include "AimOffsetSurvivorSubAnimInstance.generated.h"

class UCurveFloat;

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

protected:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	float _pitch;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	float _yaw;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	float _yawInterpolated;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool _allowLookAt;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool _isUsingAimItem;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool _isInjured;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool _isCrawling;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool _isIdle;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool _isDrasticYawChangeDetected;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _yawInterpolationSpeed;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _yawDeadzoneStart;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _yawClampValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _yawDrasticChangeUpperLimit;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _yawDrasticChangeLowerLimit;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _yawDrasticChangeInterpolationSpeed;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UCurveFloat* _yawInterpolateEaseIn;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UCurveFloat* _yawInterpolateEaseOut;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _yawInterpolationEaseInLength;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _yawInterpolationEaseOutDistance;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool _isYawInDeadZone;

private:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	float _currentTargetYaw;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	float _yawAcceleration;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	float _yawAccelerationTime;

public:
	UAimOffsetSurvivorSubAnimInstance();
};

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