ue-mcp 0.4.29 → 0.4.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tools/material.js
CHANGED
|
@@ -27,8 +27,8 @@ export const materialTool = categoryTool("material", "Materials: create, read, p
|
|
|
27
27
|
- set_blend_mode: Set blend mode. Params: assetPath, blendMode (Opaque|Masked|Translucent|Additive|Modulate|AlphaComposite|AlphaHoldout)
|
|
28
28
|
- set_base_color: Set base color. Params: assetPath, color {r,g,b,a?}
|
|
29
29
|
- connect_texture: Connect texture to property. Params: materialPath, texturePath, property
|
|
30
|
-
- add_expression: Add expression node. Params: materialPath, expressionType,
|
|
31
|
-
- connect_expressions: Wire two expressions. Params: materialPath, sourceExpression, sourceOutput?, targetExpression, targetInput?
|
|
30
|
+
- add_expression: Add expression node. Returns nodeId (use as sourceExpression/targetExpression). Params: materialPath, expressionType, name?, parameterName?, positionX?, positionY?
|
|
31
|
+
- connect_expressions: Wire two expressions. Use nodeId from add_expression, or expression name/index/class. Params: materialPath, sourceExpression, sourceOutput?, targetExpression, targetInput?
|
|
32
32
|
- connect_to_property: Wire expression to material output. Params: materialPath, expressionName, outputName?, property (BaseColor|Normal|Roughness|Metallic|Emissive|...)
|
|
33
33
|
- list_expressions: List expression nodes. Params: materialPath
|
|
34
34
|
- delete_expression: Remove expression. Params: materialPath, expressionName
|
package/package.json
CHANGED
|
@@ -615,11 +615,67 @@ TSharedPtr<FJsonValue> FMaterialHandlers::AddMaterialExpression(const TSharedPtr
|
|
|
615
615
|
UMaterialExpression* NewExpression = NewObject<UMaterialExpression>(Material, ExpressionClass);
|
|
616
616
|
Material->GetExpressionCollection().AddExpression(NewExpression);
|
|
617
617
|
|
|
618
|
+
// Apply optional properties
|
|
619
|
+
FString ExpressionName;
|
|
620
|
+
if (Params->TryGetStringField(TEXT("name"), ExpressionName) || Params->TryGetStringField(TEXT("expressionName"), ExpressionName))
|
|
621
|
+
{
|
|
622
|
+
NewExpression->Desc = ExpressionName;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// Set parameter name for parameter expressions
|
|
626
|
+
FString ParameterName;
|
|
627
|
+
if (Params->TryGetStringField(TEXT("parameterName"), ParameterName))
|
|
628
|
+
{
|
|
629
|
+
if (UMaterialExpressionScalarParameter* ScalarParam = Cast<UMaterialExpressionScalarParameter>(NewExpression))
|
|
630
|
+
{
|
|
631
|
+
ScalarParam->ParameterName = FName(*ParameterName);
|
|
632
|
+
}
|
|
633
|
+
else if (UMaterialExpressionVectorParameter* VectorParam = Cast<UMaterialExpressionVectorParameter>(NewExpression))
|
|
634
|
+
{
|
|
635
|
+
VectorParam->ParameterName = FName(*ParameterName);
|
|
636
|
+
}
|
|
637
|
+
else if (UMaterialExpressionTextureObjectParameter* TexParam = Cast<UMaterialExpressionTextureObjectParameter>(NewExpression))
|
|
638
|
+
{
|
|
639
|
+
TexParam->ParameterName = FName(*ParameterName);
|
|
640
|
+
}
|
|
641
|
+
// If name not set via Desc, use parameterName as the description too
|
|
642
|
+
if (NewExpression->Desc.IsEmpty())
|
|
643
|
+
{
|
|
644
|
+
NewExpression->Desc = ParameterName;
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
// Set position
|
|
649
|
+
double PosX = 0, PosY = 0;
|
|
650
|
+
if (Params->TryGetNumberField(TEXT("positionX"), PosX))
|
|
651
|
+
{
|
|
652
|
+
NewExpression->MaterialExpressionEditorX = static_cast<int32>(PosX);
|
|
653
|
+
}
|
|
654
|
+
if (Params->TryGetNumberField(TEXT("positionY"), PosY))
|
|
655
|
+
{
|
|
656
|
+
NewExpression->MaterialExpressionEditorY = static_cast<int32>(PosY);
|
|
657
|
+
}
|
|
658
|
+
|
|
618
659
|
Material->PostEditChange();
|
|
619
|
-
|
|
660
|
+
|
|
661
|
+
// Save the package so subsequent list/connect calls see the expression
|
|
662
|
+
UPackage* Package = Material->GetOutermost();
|
|
663
|
+
if (Package)
|
|
664
|
+
{
|
|
665
|
+
Package->MarkPackageDirty();
|
|
666
|
+
FString PackageFileName = FPackageName::LongPackageNameToFilename(Package->GetName(), FPackageName::GetAssetPackageExtension());
|
|
667
|
+
FSavePackageArgs SaveArgs;
|
|
668
|
+
SaveArgs.TopLevelFlags = RF_Standalone;
|
|
669
|
+
UPackage::SavePackage(Package, nullptr, *PackageFileName, SaveArgs);
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
// Return the index as nodeId for use with connect_expressions and other operations
|
|
673
|
+
int32 NodeIndex = Material->GetExpressions().Num() - 1;
|
|
620
674
|
|
|
621
675
|
Result->SetStringField(TEXT("expressionType"), ExpressionType);
|
|
622
676
|
Result->SetStringField(TEXT("expressionClass"), NewExpression->GetClass()->GetName());
|
|
677
|
+
Result->SetStringField(TEXT("nodeId"), FString::FromInt(NodeIndex));
|
|
678
|
+
Result->SetStringField(TEXT("description"), NewExpression->GetDescription());
|
|
623
679
|
Result->SetStringField(TEXT("materialPath"), Material->GetPathName());
|
|
624
680
|
Result->SetNumberField(TEXT("expressionCount"), Material->GetExpressions().Num());
|
|
625
681
|
Result->SetBoolField(TEXT("success"), true);
|
|
@@ -648,16 +704,30 @@ TSharedPtr<FJsonValue> FMaterialHandlers::ListMaterialExpressions(const TSharedP
|
|
|
648
704
|
}
|
|
649
705
|
|
|
650
706
|
TArray<TSharedPtr<FJsonValue>> ExpressionsArray;
|
|
651
|
-
|
|
707
|
+
auto Expressions = Material->GetExpressions();
|
|
708
|
+
for (int32 i = 0; i < Expressions.Num(); i++)
|
|
652
709
|
{
|
|
710
|
+
UMaterialExpression* Expression = Expressions[i];
|
|
653
711
|
if (!Expression) continue;
|
|
654
712
|
|
|
655
713
|
TSharedPtr<FJsonObject> ExprObj = MakeShared<FJsonObject>();
|
|
714
|
+
ExprObj->SetStringField(TEXT("nodeId"), FString::FromInt(i));
|
|
656
715
|
ExprObj->SetStringField(TEXT("class"), Expression->GetClass()->GetName());
|
|
657
716
|
ExprObj->SetStringField(TEXT("description"), Expression->GetDescription());
|
|
717
|
+
ExprObj->SetStringField(TEXT("name"), Expression->Desc);
|
|
658
718
|
ExprObj->SetNumberField(TEXT("positionX"), Expression->MaterialExpressionEditorX);
|
|
659
719
|
ExprObj->SetNumberField(TEXT("positionY"), Expression->MaterialExpressionEditorY);
|
|
660
720
|
|
|
721
|
+
// Include parameter name if applicable
|
|
722
|
+
if (UMaterialExpressionScalarParameter* SP = Cast<UMaterialExpressionScalarParameter>(Expression))
|
|
723
|
+
{
|
|
724
|
+
ExprObj->SetStringField(TEXT("parameterName"), SP->ParameterName.ToString());
|
|
725
|
+
}
|
|
726
|
+
else if (UMaterialExpressionVectorParameter* VP = Cast<UMaterialExpressionVectorParameter>(Expression))
|
|
727
|
+
{
|
|
728
|
+
ExprObj->SetStringField(TEXT("parameterName"), VP->ParameterName.ToString());
|
|
729
|
+
}
|
|
730
|
+
|
|
661
731
|
ExpressionsArray.Add(MakeShared<FJsonValueObject>(ExprObj));
|
|
662
732
|
}
|
|
663
733
|
|