#pragma once

#include "CoreMinimal.h"
#include "DBDBaseAnimInstance.h"
#include "UObject/NoExportTypes.h"
#include "Engine/EngineTypes.h"
#include "QuadrupedIKCRSubAnimInstance.generated.h"

class USkeletalMeshComponent;
class UWorld;

UCLASS(Blueprintable, NonTransient)
class DBDANIMATION_API UQuadrupedIKCRSubAnimInstance : public UDBDBaseAnimInstance
{
	GENERATED_BODY()

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _enableIK;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _adjustCamera;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _firstPersonView;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _meshScale;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TEnumAsByte<ETraceTypeQuery> _traceTypeQuery;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _traceComplex;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _ignoreTouches;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _noGroundTag;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _frontFeetLineTraceStartOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _frontFeetLineTraceEndOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _backFeetLineTraceStartOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _backFeetLineTraceEndOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _footIkSpeed;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _pelvisIkSpeed;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _pelvisIkSpeedFPV;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _leftFrontFootBoneName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _rightFrontFootBoneName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _leftBackFootBoneName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _rightBackFootBoneName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _charSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _pelvisSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _cameraSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _leftFrontFootSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _rightFrontFootSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _leftBackFootSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _rightBackFootSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _leftFrontFootPoleSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _leftFrontFootPole2SocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _rightFrontFootPoleSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _rightFrontFootPole2SocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _leftBackFootPoleSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _leftBackFootPole2SocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _rightBackFootPoleSocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName _rightBackFootPole2SocketName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _pelvisRotationMinOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _pelvisRotationMaxOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _pelvisPositionOffsetMin;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _pelvisPositionOffsetMax;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _pelvisPositionOffsetMinFPV;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _pelvisPositionOffsetMaxFPV;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _minDistanceFromCapsuleFrontFeetIdle;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _maxDistanceFromCapsuleFrontFeetIdle;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _minDistanceFromCapsuleBackFeetIdle;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _maxDistanceFromCapsuleBackFeetIdle;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _minDistanceFromCapsuleFrontFeetMoving;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _maxDistanceFromCapsuleFrontFeetMoving;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _minDistanceFromCapsuleBackFeetMoving;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _maxDistanceFromCapsuleBackFeetMoving;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FName> _leftFrontLimbChain;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _leftFrontFootMaxExtensionPercentage;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FName> _rightFrontLimbChain;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _rightFrontFootMaxExtensionPercentage;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FName> _leftBackLimbChain;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _leftBackFootMaxExtensionPercentage;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FName> _rightBackLimbChain;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _rightBackFootMaxExtensionPercentage;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _leftFrontFootUngroundedTolerance;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _rightFrontFootUngroundedTolerance;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _leftBackFootUngroundedTolerance;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _rightBackFootUngroundedTolerance;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _frontFeetUpDisplacement;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _frontFeetDownDisplacement;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _backFeetUpDisplacement;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _backFeetDownDisplacement;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _pelvisPositionOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRotator _worldPitch;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRotator _cameraRotationOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _cameraPositionOffset;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _leftFrontFootLocation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _leftFrontFootPole1Location;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _leftFrontFootPole2Location;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _leftBackFootPole1Location;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _leftBackFootPole2Location;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _rightFrontFootLocation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _rightFrontFootPole1Location;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _rightFrontFootPole2Location;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _rightBackFootPole1Location;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _rightBackFootPole2Location;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _leftBackFootLocation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector _rightBackFootLocation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FTransform _leftFrontFootTransform;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FTransform _rightFrontFootTransform;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FTransform _leftBackFootTransform;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FTransform _rightBackFootTransform;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRotator _leftFrontFootRotation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRotator _rightFrontFootRotation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRotator _leftBackFootRotation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRotator _rightBackFootRotation;

private:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, Instanced, meta=(AllowPrivateAccess=true))
	USkeletalMeshComponent* _skeletalMeshComponent;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	UWorld* _world;

public:
	UQuadrupedIKCRSubAnimInstance();
};

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