Files
UnrealEngineUWP/Engine/Source/Developer/RigVMDeveloper/Public/RigVMModel/Nodes/RigVMFunctionReferenceNode.h
helge mathee 3acbeeb2d3 RigVM: Store a hash along side each graph identifying the structural state
Avoid rebuilding graphs if we don't need to. hashes contain the structure of each node, the structure of any used data type and the structure of each used template.

#rb sara.schvartzman
#preflight https://horde.devtools.epicgames.com/job/63ee1c6fc9692d7c04423941

[CL 24280391 by helge mathee in ue5-main branch]
2023-02-17 08:46:05 -05:00

78 lines
2.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "RigVMCore/RigVMGraphFunctionDefinition.h"
#include "RigVMModel/RigVMGraph.h"
#include "RigVMModel/Nodes/RigVMLibraryNode.h"
#include "RigVMFunctionReferenceNode.generated.h"
class URigVMFunctionLibrary;
/**
* The Function Reference Node is a library node which references
* a library node from a separate function library graph.
*/
UCLASS(BlueprintType)
class RIGVMDEVELOPER_API URigVMFunctionReferenceNode : public URigVMLibraryNode
{
GENERATED_BODY()
public:
// URigVMNode interface
virtual FString GetNodeTitle() const override;
virtual FLinearColor GetNodeColor() const override;
virtual FText GetToolTipText() const override;
// end URigVMNode interface
// URigVMLibraryNode interface
virtual FString GetNodeCategory() const override;
virtual FString GetNodeKeywords() const override;
virtual TArray<FRigVMExternalVariable> GetExternalVariables() const override;
virtual const FRigVMTemplate* GetTemplate() const override { return nullptr; }
virtual FRigVMGraphFunctionIdentifier GetFunctionIdentifier() const override;
// end URigVMLibraryNode interface
bool IsReferencedFunctionHostLoaded() const;
bool IsReferencedNodeLoaded() const;
URigVMLibraryNode* LoadReferencedNode() const;
// Variable remapping
bool RequiresVariableRemapping() const;
bool IsFullyRemapped() const;
TArray<FRigVMExternalVariable> GetExternalVariables(bool bRemapped) const;
const TMap<FName, FName>& GetVariableMap() const { return VariableMap; }
FName GetOuterVariableName(const FName& InInnerVariableName) const;
// end Variable remapping
virtual uint32 GetStructureHash() const override;
const FRigVMGraphFunctionHeader& GetReferencedFunctionHeader() const { return ReferencedFunctionHeader; }
const FRigVMGraphFunctionData* GetReferencedFunctionData() const;
private:
virtual FText GetToolTipTextForPin(const URigVMPin* InPin) const override;
bool RequiresVariableRemappingInternal(TArray<FRigVMExternalVariable>& InnerVariables) const;
//void SetReferencedFunctionData(FRigVMGraphFunctionData* Data);
UPROPERTY(AssetRegistrySearchable)
FRigVMGraphFunctionHeader ReferencedFunctionHeader;
UPROPERTY(AssetRegistrySearchable, meta=(DeprecatedProperty=5.2))
TSoftObjectPtr<URigVMLibraryNode> ReferencedNodePtr_DEPRECATED;
UPROPERTY()
TMap<FName, FName> VariableMap;
friend class URigVMController;
friend class FRigVMParserAST;
friend class UControlRigBlueprint;
friend struct FRigVMClient;
friend struct EngineTestRigVMFramework;
};