#pragma once

#include "CoreMinimal.h"
#include "AnimInstanceLeader.h"
#include "SkillCheckFailureTracker.h"
#include "BaseSurvivorAnimInstance.h"
#include "UObject/NoExportTypes.h"
#include "GameplayTagContainer.h"
#include "GameEventData.h"
#include "RepairGeneratorSurvivorSubAnimInstance.generated.h"

class UAnimSequence;

UCLASS(Blueprintable, NonTransient)
class DBDANIMATION_API URepairGeneratorSurvivorSubAnimInstance : public UBaseSurvivorAnimInstance, public IAnimInstanceLeader, public ISkillCheckFailureTracker
{
	GENERATED_BODY()

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float _skillCheckDelayTime;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isReturningFromFail;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	FVector _snapPosition;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	int32 _side;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	int32 _repairAnimIndex;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isRepairingGenerator;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _rightFootDown;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 _animSequenceVariationCount;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _hasSkillCheckFailed;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isS34P01Accumulating;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleFTRTFootTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleBreak01FTRTTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenFTIdleInTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenFTIdleLoopTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenFTIdleOutTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleBKRTFootTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleBreak01BKRTFootTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenBKIdleInTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenBKIdleLoopTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenBKIdleOutTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleLTRTFootTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleBreak01LTRTFootTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleBreak02LTRTFootTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenLTIdleInTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenLTIdleLoopTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenLTIdleOutTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleRTRTFootTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorIdleBreak01RTRTFootTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenRTIdleInTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenRTIdleLoopTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenRTIdleOutTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenFTFailTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenBKFailTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenLTFailTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asS34P01GenRTFailTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorFailFTTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorFailBKTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorFailLTTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag _asGeneratorFailRTTag;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleFTRTFoot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleBreak01FTRT;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenFTIdleIn;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenFTIdleLoop;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenFTIdleOut;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleBKRTFoot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleBreak01BKRTFoot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenBKIdleIn;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenBKIdleLoop;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenBKIdleOut;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleLTRTFoot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleBreak01LTRTFoot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleBreak02LTRTFoot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenLTIdleIn;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenLTIdleLoop;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenLTIdleOut;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleRTRTFoot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorIdleBreak01RTRTFoot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenRTIdleIn;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenRTIdleLoop;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenRTIdleOut;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenFTFail;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenBKFail;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenLTFail;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asS34P01GenRTFail;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorFailFT;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorFailBK;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorFailLT;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UAnimSequence* _asGeneratorFailRT;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isRepairIndex0;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isRepairIndex1;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isRepairIndex2;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isS34P01AccumulatingAndReturningFromFail;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _isS34P01AccumulatingAndNotReturningFromFail;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient)
	bool _generatorActivationToBaseRule;

protected:
	UFUNCTION(BlueprintCallable)
	void UpdatePostSkillCheckResponse();

public:
	UFUNCTION(BlueprintCallable)
	virtual void ResetSkillCheckFailed() override PURE_VIRTUAL(ResetSkillCheckFailed, );

protected:
	UFUNCTION()
	virtual void OnSkillCheckFailed(const FGameplayTag gameEventType, const FGameEventData& gameEventData) override PURE_VIRTUAL(OnSkillCheckFailed, );

public:
	URepairGeneratorSurvivorSubAnimInstance();
};

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