//------------------------------------------------------------------------------ bool UBlueprintComponentNodeSpawner::BindToNode(UEdGraphNode* Node, UObject* Binding) const { bool bSuccessfulBinding = false; UK2Node_AddComponent* AddCompNode = CastChecked<UK2Node_AddComponent>(Node); UActorComponent* ComponentTemplate = AddCompNode->GetTemplateFromNode(); if (ComponentTemplate != nullptr) { bSuccessfulBinding = FComponentAssetBrokerage::AssignAssetToComponent(ComponentTemplate, Binding); AddCompNode->ReconstructNode(); } return bSuccessfulBinding; }
UEdGraphNode* FEdGraphSchemaAction_K2AddComponent::PerformAction(class UEdGraph* ParentGraph, UEdGraphPin* FromPin, const FVector2D Location, bool bSelectNewNode/* = true*/) { if (ComponentClass == NULL) { return NULL; } UBlueprint* Blueprint = FBlueprintEditorUtils::FindBlueprintForGraphChecked(ParentGraph); UEdGraphNode* NewNode = FEdGraphSchemaAction_K2NewNode::PerformAction(ParentGraph, FromPin, Location, bSelectNewNode); if ((NewNode != NULL) && (Blueprint != NULL)) { UK2Node_AddComponent* AddCompNode = CastChecked<UK2Node_AddComponent>(NewNode); ensure(NULL != Cast<UBlueprintGeneratedClass>(Blueprint->GeneratedClass)); // Then create a new template object, and add to array in UActorComponent* NewTemplate = NewObject<UActorComponent>(Blueprint->GeneratedClass, ComponentClass, NAME_None, RF_ArchetypeObject | RF_Public); Blueprint->ComponentTemplates.Add(NewTemplate); // Set the name of the template as the default for the TemplateName param UEdGraphPin* TemplateNamePin = AddCompNode->GetTemplateNamePinChecked(); if (TemplateNamePin) { TemplateNamePin->DefaultValue = NewTemplate->GetName(); } // Set the return type to be the type of the template UEdGraphPin* ReturnPin = AddCompNode->GetReturnValuePin(); if (ReturnPin) { ReturnPin->PinType.PinSubCategoryObject = *ComponentClass; } // Set the asset if(ComponentAsset != NULL) { FComponentAssetBrokerage::AssignAssetToComponent(NewTemplate, ComponentAsset); } AddCompNode->ReconstructNode(); } FBlueprintEditorUtils::MarkBlueprintAsModified(Blueprint); return NewNode; }