More MCP refactors
This commit is contained in:
@@ -92,13 +92,8 @@ public:
|
||||
}
|
||||
|
||||
// Check if asset already exists
|
||||
FString FullAssetPath = PackagePath / Name;
|
||||
if (UMCPAssetFinder::FindAsset(UMaterial::StaticClass(), Name) || UMCPAssetFinder::FindAsset(UMaterial::StaticClass(), FullAssetPath))
|
||||
{
|
||||
return MCPUtils::MakeErrorJson(Result, FString::Printf(
|
||||
TEXT("Material '%s' already exists. Use a different name or delete the existing asset first."),
|
||||
*Name));
|
||||
}
|
||||
MCPAssets<UMaterial> ExistCheck;
|
||||
if (!ExistCheck.Exact(Name).Errors(Result).EAny().Info()) return;
|
||||
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Creating Material '%s' in '%s'"), *Name, *PackagePath);
|
||||
|
||||
@@ -197,8 +192,6 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Created Material '%s' (saved: %s)"),
|
||||
*Name, bSaved ? TEXT("true") : TEXT("false"));
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetStringField(TEXT("name"), Name);
|
||||
Result->SetStringField(TEXT("path"), MaterialObj->GetPathName());
|
||||
Result->SetStringField(TEXT("domain"), DomainToString(MaterialObj->MaterialDomain));
|
||||
Result->SetStringField(TEXT("blendMode"), BlendModeToString(MaterialObj->BlendMode));
|
||||
@@ -240,8 +233,9 @@ public:
|
||||
}
|
||||
|
||||
// Load material
|
||||
UMaterial* MaterialObj = UMCPAssetFinder::LoadAsset<UMaterial>(Material, Result);
|
||||
if (!MaterialObj) return;
|
||||
MCPAssets<UMaterial> Assets;
|
||||
if (!Assets.Exact(Material).Errors(Result).ENone().ETwo().Load()) return;
|
||||
UMaterial* MaterialObj = Assets.Object();
|
||||
|
||||
FString OldValue;
|
||||
FString NewValue;
|
||||
@@ -490,9 +484,7 @@ public:
|
||||
DryRun ? TEXT("[DRY RUN] ") : TEXT(""),
|
||||
*Property, *Material, *OldValue, *NewValue);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetStringField(TEXT("material"), MaterialObj->GetName());
|
||||
Result->SetStringField(TEXT("property"), Property);
|
||||
Result->SetStringField(TEXT("oldValue"), OldValue);
|
||||
Result->SetStringField(TEXT("newValue"), NewValue);
|
||||
Result->SetBoolField(TEXT("dryRun"), DryRun);
|
||||
@@ -593,15 +585,17 @@ public:
|
||||
{
|
||||
return MCPUtils::MakeErrorJson(Result, TEXT("Specify either 'material' or 'materialFunction', not both"));
|
||||
}
|
||||
MatFunc = UMCPAssetFinder::LoadAsset<UMaterialFunction>(MaterialFunction, Result);
|
||||
if (!MatFunc) return;
|
||||
MCPAssets<UMaterialFunction> MFAssets;
|
||||
if (!MFAssets.Exact(MaterialFunction).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MatFunc = MFAssets.Object();
|
||||
Owner = MatFunc;
|
||||
AssetDisplayName = MatFunc->GetName();
|
||||
}
|
||||
else
|
||||
{
|
||||
MaterialObj = UMCPAssetFinder::LoadAsset<UMaterial>(Material, Result);
|
||||
if (!MaterialObj) return;
|
||||
MCPAssets<UMaterial> MatAssets;
|
||||
if (!MatAssets.Exact(Material).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MaterialObj = MatAssets.Object();
|
||||
Owner = MaterialObj;
|
||||
AssetDisplayName = MaterialObj->GetName();
|
||||
}
|
||||
@@ -611,12 +605,8 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: [DRY RUN] Would add expression '%s' to '%s' at (%d, %d)"),
|
||||
*ExpressionClass, *AssetDisplayName, PosX, PosY);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetBoolField(TEXT("dryRun"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("expressionClass"), ExpressionClass);
|
||||
Result->SetNumberField(TEXT("posX"), PosX);
|
||||
Result->SetNumberField(TEXT("posY"), PosY);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -687,12 +677,8 @@ public:
|
||||
// Serialize the expression details
|
||||
TSharedPtr<FJsonObject> ExprDetails = MCPUtils::SerializeMaterialExpression(NewExpr);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("expressionClass"), ExpressionClass);
|
||||
Result->SetStringField(TEXT("nodeId"), NodeGuid);
|
||||
Result->SetNumberField(TEXT("posX"), PosX);
|
||||
Result->SetNumberField(TEXT("posY"), PosY);
|
||||
if (ExprDetails.IsValid())
|
||||
{
|
||||
Result->SetObjectField(TEXT("expression"), ExprDetails);
|
||||
@@ -742,14 +728,16 @@ public:
|
||||
|
||||
if (!MaterialFunction.IsEmpty())
|
||||
{
|
||||
MatFunc = UMCPAssetFinder::LoadAsset<UMaterialFunction>(MaterialFunction, Result);
|
||||
if (!MatFunc) return;
|
||||
MCPAssets<UMaterialFunction> MFAssets;
|
||||
if (!MFAssets.Exact(MaterialFunction).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MatFunc = MFAssets.Object();
|
||||
AssetDisplayName = MatFunc->GetName();
|
||||
}
|
||||
else
|
||||
{
|
||||
MaterialObj = UMCPAssetFinder::LoadAsset<UMaterial>(Material, Result);
|
||||
if (!MaterialObj) return;
|
||||
MCPAssets<UMaterial> MatAssets;
|
||||
if (!MatAssets.Exact(Material).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MaterialObj = MatAssets.Object();
|
||||
AssetDisplayName = MaterialObj->GetName();
|
||||
}
|
||||
|
||||
@@ -792,10 +780,8 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: [DRY RUN] Would delete expression '%s' (nodeId: %s) from '%s'"),
|
||||
*DeletedExprClass, *Node, *AssetDisplayName);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetBoolField(TEXT("dryRun"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("deletedNode"), Node);
|
||||
Result->SetStringField(TEXT("deletedNodeTitle"), DeletedNodeTitle);
|
||||
Result->SetStringField(TEXT("deletedExpressionClass"), DeletedExprClass);
|
||||
return;
|
||||
@@ -827,9 +813,7 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Deleted expression '%s' (nodeId: %s) from '%s' (saved: %s)"),
|
||||
*DeletedExprClass, *Node, *AssetDisplayName, bSaved ? TEXT("true") : TEXT("false"));
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("deletedNode"), Node);
|
||||
Result->SetStringField(TEXT("deletedNodeTitle"), DeletedNodeTitle);
|
||||
Result->SetStringField(TEXT("deletedExpressionClass"), DeletedExprClass);
|
||||
Result->SetBoolField(TEXT("saved"), bSaved);
|
||||
@@ -886,14 +870,16 @@ public:
|
||||
|
||||
if (!MaterialFunction.IsEmpty())
|
||||
{
|
||||
MatFunc = UMCPAssetFinder::LoadAsset<UMaterialFunction>(MaterialFunction, Result);
|
||||
if (!MatFunc) return;
|
||||
MCPAssets<UMaterialFunction> MFAssets;
|
||||
if (!MFAssets.Exact(MaterialFunction).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MatFunc = MFAssets.Object();
|
||||
AssetDisplayName = MatFunc->GetName();
|
||||
}
|
||||
else
|
||||
{
|
||||
MaterialObj = UMCPAssetFinder::LoadAsset<UMaterial>(Material, Result);
|
||||
if (!MaterialObj) return;
|
||||
MCPAssets<UMaterial> MatAssets;
|
||||
if (!MatAssets.Exact(Material).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MaterialObj = MatAssets.Object();
|
||||
AssetDisplayName = MaterialObj->GetName();
|
||||
}
|
||||
|
||||
@@ -967,9 +953,7 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: [DRY RUN] Would connect %s.%s -> %s.%s in '%s'"),
|
||||
*SourceNode, *SourcePinName, *TargetNode, *TargetPinName, *AssetDisplayName);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetBoolField(TEXT("dryRun"), true);
|
||||
Result->SetBoolField(TEXT("connected"), false);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
return;
|
||||
}
|
||||
@@ -986,8 +970,6 @@ public:
|
||||
|
||||
bool bConnected = Schema->TryCreateConnection(SourcePin, TargetPin);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), bConnected);
|
||||
Result->SetBoolField(TEXT("connected"), bConnected);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
|
||||
if (!bConnected)
|
||||
@@ -1050,14 +1032,16 @@ public:
|
||||
|
||||
if (!MaterialFunction.IsEmpty())
|
||||
{
|
||||
MatFunc = UMCPAssetFinder::LoadAsset<UMaterialFunction>(MaterialFunction, Result);
|
||||
if (!MatFunc) return;
|
||||
MCPAssets<UMaterialFunction> MFAssets;
|
||||
if (!MFAssets.Exact(MaterialFunction).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MatFunc = MFAssets.Object();
|
||||
AssetDisplayName = MatFunc->GetName();
|
||||
}
|
||||
else
|
||||
{
|
||||
MaterialObj = UMCPAssetFinder::LoadAsset<UMaterial>(Material, Result);
|
||||
if (!MaterialObj) return;
|
||||
MCPAssets<UMaterial> MatAssets;
|
||||
if (!MatAssets.Exact(Material).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MaterialObj = MatAssets.Object();
|
||||
AssetDisplayName = MaterialObj->GetName();
|
||||
}
|
||||
|
||||
@@ -1109,11 +1093,8 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: [DRY RUN] Would disconnect pin '%s' on node '%s' in '%s' (%d links)"),
|
||||
*PinName, *Node, *AssetDisplayName, BrokenCount);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetBoolField(TEXT("dryRun"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("nodeId"), Node);
|
||||
Result->SetStringField(TEXT("pinName"), PinName);
|
||||
Result->SetNumberField(TEXT("brokenLinkCount"), BrokenCount);
|
||||
return;
|
||||
}
|
||||
@@ -1131,10 +1112,7 @@ public:
|
||||
// Save
|
||||
bool bSaved = MaterialObj ? MCPUtils::SaveMaterialPackage(MaterialObj) : MCPUtils::SaveGenericPackage(MatFunc);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("nodeId"), Node);
|
||||
Result->SetStringField(TEXT("pinName"), PinName);
|
||||
Result->SetNumberField(TEXT("brokenLinkCount"), BrokenCount);
|
||||
Result->SetBoolField(TEXT("saved"), bSaved);
|
||||
}
|
||||
@@ -1184,14 +1162,16 @@ public:
|
||||
|
||||
if (!MaterialFunction.IsEmpty())
|
||||
{
|
||||
MatFunc = UMCPAssetFinder::LoadAsset<UMaterialFunction>(MaterialFunction, Result);
|
||||
if (!MatFunc) return;
|
||||
MCPAssets<UMaterialFunction> MFAssets;
|
||||
if (!MFAssets.Exact(MaterialFunction).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MatFunc = MFAssets.Object();
|
||||
AssetDisplayName = MatFunc->GetName();
|
||||
}
|
||||
else
|
||||
{
|
||||
MaterialObj = UMCPAssetFinder::LoadAsset<UMaterial>(Material, Result);
|
||||
if (!MaterialObj) return;
|
||||
MCPAssets<UMaterial> MatAssets;
|
||||
if (!MatAssets.Exact(Material).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MaterialObj = MatAssets.Object();
|
||||
AssetDisplayName = MaterialObj->GetName();
|
||||
}
|
||||
|
||||
@@ -1414,9 +1394,7 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Set expression value on node '%s' (%s) in '%s': %s"),
|
||||
*Node, *ExprType, *AssetDisplayName, *NewValueStr);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("nodeId"), Node);
|
||||
Result->SetStringField(TEXT("expressionType"), ExprType);
|
||||
Result->SetStringField(TEXT("newValue"), NewValueStr);
|
||||
Result->SetBoolField(TEXT("saved"), bSaved);
|
||||
@@ -1470,14 +1448,16 @@ public:
|
||||
|
||||
if (!MaterialFunction.IsEmpty())
|
||||
{
|
||||
MatFunc = UMCPAssetFinder::LoadAsset<UMaterialFunction>(MaterialFunction, Result);
|
||||
if (!MatFunc) return;
|
||||
MCPAssets<UMaterialFunction> MFAssets;
|
||||
if (!MFAssets.Exact(MaterialFunction).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MatFunc = MFAssets.Object();
|
||||
AssetDisplayName = MatFunc->GetName();
|
||||
}
|
||||
else
|
||||
{
|
||||
MaterialObj = UMCPAssetFinder::LoadAsset<UMaterial>(Material, Result);
|
||||
if (!MaterialObj) return;
|
||||
MCPAssets<UMaterial> MatAssets;
|
||||
if (!MatAssets.Exact(Material).Errors(Result).ENone().ETwo().Load()) return;
|
||||
MaterialObj = MatAssets.Object();
|
||||
AssetDisplayName = MaterialObj->GetName();
|
||||
}
|
||||
|
||||
@@ -1510,12 +1490,8 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: [DRY RUN] Would move node '%s' to (%d, %d) in '%s'"),
|
||||
*Node, PosX, PosY, *AssetDisplayName);
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetBoolField(TEXT("dryRun"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("nodeId"), Node);
|
||||
Result->SetNumberField(TEXT("posX"), PosX);
|
||||
Result->SetNumberField(TEXT("posY"), PosY);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1540,11 +1516,7 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Moved node '%s' to (%d, %d) in '%s' (saved: %s)"),
|
||||
*Node, PosX, PosY, *AssetDisplayName, bSaved ? TEXT("true") : TEXT("false"));
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetStringField(TEXT("material"), AssetDisplayName);
|
||||
Result->SetStringField(TEXT("nodeId"), Node);
|
||||
Result->SetNumberField(TEXT("posX"), PosX);
|
||||
Result->SetNumberField(TEXT("posY"), PosY);
|
||||
Result->SetBoolField(TEXT("saved"), bSaved);
|
||||
}
|
||||
};
|
||||
@@ -1581,13 +1553,8 @@ public:
|
||||
}
|
||||
|
||||
// Check if asset already exists
|
||||
FString FullAssetPath = PackagePath / Name;
|
||||
if (UMCPAssetFinder::FindAsset(UMaterialFunction::StaticClass(), Name) || UMCPAssetFinder::FindAsset(UMaterialFunction::StaticClass(), FullAssetPath))
|
||||
{
|
||||
return MCPUtils::MakeErrorJson(Result, FString::Printf(
|
||||
TEXT("Material Function '%s' already exists. Use a different name or delete the existing asset first."),
|
||||
*Name));
|
||||
}
|
||||
MCPAssets<UMaterialFunction> ExistCheck;
|
||||
if (!ExistCheck.Exact(Name).Errors(Result).EAny().Info()) return;
|
||||
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Creating Material Function '%s' in '%s'"), *Name, *PackagePath);
|
||||
|
||||
@@ -1620,13 +1587,7 @@ public:
|
||||
UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Created Material Function '%s' (saved: %s)"),
|
||||
*Name, bSaved ? TEXT("true") : TEXT("false"));
|
||||
|
||||
Result->SetBoolField(TEXT("success"), true);
|
||||
Result->SetStringField(TEXT("name"), Name);
|
||||
Result->SetStringField(TEXT("path"), MF->GetPathName());
|
||||
if (!Description.IsEmpty())
|
||||
{
|
||||
Result->SetStringField(TEXT("description"), Description);
|
||||
}
|
||||
Result->SetBoolField(TEXT("saved"), bSaved);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user