Files
UnrealEngine/Engine/Plugins/Interchange/Runtime/Source/Nodes/Private/InterchangeMaterialInstanceNode.cpp
2025-05-18 13:04:45 +08:00

91 lines
3.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "InterchangeMaterialInstanceNode.h"
#include "Nodes/InterchangeBaseNodeContainer.h"
#include "InterchangeShaderGraphNode.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(InterchangeMaterialInstanceNode)
FString UInterchangeMaterialInstanceNode::GetTypeName() const
{
return TEXT("MaterialInstanceNode");
}
FString UInterchangeMaterialInstanceNode::MakeNodeUid(const FStringView NodeName, const FStringView ParentNodeUid)
{
FString MaterialInstanceNodeUid = FString(UInterchangeBaseNode::HierarchySeparator) + TEXT("MaterialInstances") + FString(UInterchangeBaseNode::HierarchySeparator);
if(ParentNodeUid.IsEmpty())
{
MaterialInstanceNodeUid += NodeName;
}
else
{
MaterialInstanceNodeUid += ParentNodeUid + FString(UInterchangeBaseNode::HierarchySeparator) + NodeName;
}
return MaterialInstanceNodeUid;
}
UInterchangeMaterialInstanceNode* UInterchangeMaterialInstanceNode::Create(UInterchangeBaseNodeContainer* NodeContainer, const FStringView NodeName, const FStringView ParentNodeUid)
{
check(NodeContainer);
const FString MaterialInstanceNodeUid = MakeNodeUid(NodeName, ParentNodeUid);
UInterchangeMaterialInstanceNode* MaterialInstanceNode = NewObject<UInterchangeMaterialInstanceNode>(NodeContainer);
NodeContainer->SetupNode(MaterialInstanceNode, MaterialInstanceNodeUid, FString(NodeName), EInterchangeNodeContainerType::TranslatedAsset, FString(ParentNodeUid));
return MaterialInstanceNode;
}
bool UInterchangeMaterialInstanceNode::SetCustomParent(const FString& AttributeValue) const
{
IMPLEMENT_NODE_ATTRIBUTE_SETTER_NODELEGATE(Parent, FString);
}
bool UInterchangeMaterialInstanceNode::GetCustomParent(FString& AttributeValue) const
{
IMPLEMENT_NODE_ATTRIBUTE_GETTER(Parent, FString);
}
bool UInterchangeMaterialInstanceNode::AddScalarParameterValue(const FString& ParameterName, float AttributeValue)
{
return AddFloatAttribute(UInterchangeShaderPortsAPI::MakeInputValueKey(ParameterName), AttributeValue);
}
bool UInterchangeMaterialInstanceNode::GetScalarParameterValue(const FString& ParameterName, float& AttributeValue) const
{
return GetFloatAttribute(UInterchangeShaderPortsAPI::MakeInputValueKey(ParameterName), AttributeValue);
}
bool UInterchangeMaterialInstanceNode::AddVectorParameterValue(const FString& ParameterName, const FLinearColor& AttributeValue)
{
return AddLinearColorAttribute(UInterchangeShaderPortsAPI::MakeInputValueKey(ParameterName), AttributeValue);
}
bool UInterchangeMaterialInstanceNode::GetVectorParameterValue(const FString& ParameterName, FLinearColor& AttributeValue) const
{
return GetLinearColorAttribute(UInterchangeShaderPortsAPI::MakeInputValueKey(ParameterName), AttributeValue);
}
bool UInterchangeMaterialInstanceNode::AddTextureParameterValue(const FString& ParameterName, const FString& AttributeValue)
{
return AddStringAttribute(UInterchangeShaderPortsAPI::MakeInputValueKey(ParameterName), AttributeValue);
}
bool UInterchangeMaterialInstanceNode::GetTextureParameterValue(const FString& ParameterName, FString& AttributeValue) const
{
return GetStringAttribute(UInterchangeShaderPortsAPI::MakeInputValueKey(ParameterName), AttributeValue);
}
bool UInterchangeMaterialInstanceNode::AddStaticSwitchParameterValue(const FString& ParameterName, bool AttributeValue)
{
return AddBooleanAttribute(UInterchangeShaderPortsAPI::MakeInputValueKey(ParameterName), AttributeValue);
}
bool UInterchangeMaterialInstanceNode::GetStaticSwitchParameterValue(const FString& ParameterName, bool& AttributeValue) const
{
return GetBooleanAttribute(UInterchangeShaderPortsAPI::MakeInputValueKey(ParameterName), AttributeValue);
}