Files
UnrealEngineUWP/Engine/Source/Editor/AnimGraph/Classes/AnimBlueprintPostCompileValidation.h
ryan durand 627baf970a Updating copyright for Engine Editor.
#rnx
#rb none


#ROBOMERGE-SOURCE: CL 10869241 via CL 10869527 via CL 10869904
#ROBOMERGE-BOT: (v613-10869866)

[CL 10870586 by ryan durand in Main branch]
2019-12-26 15:33:43 -05:00

114 lines
4.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/ObjectMacros.h"
#include "UObject/Object.h"
#include "Animation/AnimSequence.h"
#include "Animation/BlendSpace.h"
#include "Animation/AnimBlueprintGeneratedClass.h"
#include "Kismet2/CompilerResultsLog.h"
#include "AnimBlueprintPostCompileValidation.generated.h"
// Encapsulated Parameters, to upgrade these without changing function signature.
struct FAnimBPCompileValidationParams
{
const class UAnimInstance* const DefaultAnimInstance;
const class UAnimBlueprintGeneratedClass* const NewAnimBlueprintClass;
FCompilerResultsLog& MessageLog;
const TMap<FProperty*, class UAnimGraphNode_Base*>& AllocatedNodePropertiesToNodes;
FAnimBPCompileValidationParams
(
const class UAnimInstance* const InDefaultAnimInstance,
const class UAnimBlueprintGeneratedClass* const InNewAnimBlueprintClass,
FCompilerResultsLog& InMessageLog,
const TMap<FProperty*, class UAnimGraphNode_Base*>& InAllocatedNodePropertiesToNodes
)
: DefaultAnimInstance(InDefaultAnimInstance)
, NewAnimBlueprintClass(InNewAnimBlueprintClass)
, MessageLog(InMessageLog)
, AllocatedNodePropertiesToNodes(InAllocatedNodePropertiesToNodes)
{}
};
// This class is a base class for performing AnimBlueprint Post Compilation Validation.
UCLASS()
class ANIMGRAPH_API UAnimBlueprintPostCompileValidation : public UObject
{
GENERATED_UCLASS_BODY()
public:
virtual void DoPostCompileValidation(FAnimBPCompileValidationParams& InParams) const;
protected:
static void PCV_PreloadObject(const UObject* const ReferencedObject);
static void PCV_GatherAnimSequences(TArray<const UAnimSequence*>& OutAnimSequences, const UAnimSequenceBase* const InAnimSequenceBase);
static void PCV_GatherAnimSequences(TArray<const UAnimSequence*>& OutAnimSequences, const class UBlendSpaceBase* const InBlendSpace);
struct FPCV_GatherParams
{
bool bFilterBySyncGroup;
int32 SyncGroupIndex;
bool bFilterByLoopingCondition;
bool bLoopingCondition;
FPCV_GatherParams
(
bool InbFilterBySyncGroup = false,
int32 InSyncGroupIndex = INDEX_NONE,
bool InbFilterByLoopingCondition = false,
bool InbLoopingCondition = false
)
: bFilterBySyncGroup(InbFilterBySyncGroup)
, SyncGroupIndex(InSyncGroupIndex)
, bFilterByLoopingCondition(InbFilterByLoopingCondition)
, bLoopingCondition(InbLoopingCondition)
{}
};
static void PCV_GatherAnimSequencesFromGraph(TArray<const UAnimSequence*>& OutAnimSequences, FAnimBPCompileValidationParams& PCV_Params, const FPCV_GatherParams& GatherParams);
static void PCV_GatherBlendSpacesFromGraph(TArray<const class UBlendSpaceBase*>& OutBlendSpaces, FAnimBPCompileValidationParams& PCV_Params);
struct FPCV_ReferencedAnimSequence
{
const UAnimSequence* AnimSequence;
const UObject* Referencer;
FPCV_ReferencedAnimSequence
(
const UAnimSequence* InAnimSequence,
const UObject* InReferencer
)
: AnimSequence(InAnimSequence)
, Referencer(InReferencer)
{}
};
struct FPCV_PropertyAndValue
{
const FProperty* Property;
const void* Value;
FPCV_PropertyAndValue
(
const FProperty* InProperty,
const void* InValue
)
: Property(InProperty)
, Value(InValue)
{}
};
static void PCV_GatherAllReferencedAnimSequences(TArray<FPCV_ReferencedAnimSequence>& OutRefAnimSequences, FAnimBPCompileValidationParams& PCV_Params);
static void PCV_GatherAnimSequencesFromStruct(TArray<FPCV_ReferencedAnimSequence>& OutRefAnimSequences, FAnimBPCompileValidationParams& PCV_Params, const UStruct* InStruct, const void* InData, TArray<FPCV_PropertyAndValue> InPropertyCallChain);
static void PCV_GatherAnimSequencesFromProperty(TArray<FPCV_ReferencedAnimSequence>& OutRefAnimSequences, FAnimBPCompileValidationParams& PCV_Params, const FProperty* InProperty, const void* InData, TArray<FPCV_PropertyAndValue> InPropertyCallChain);
private:
virtual bool NeedsLoadForClient() const override { return false; }
virtual bool NeedsLoadForServer() const override { return false; }
};