void FKCHandler_VariableSet::RegisterNets(FKismetFunctionContext& Context, UEdGraphNode* Node) { if(UK2Node_Variable* SetterNode = Cast<UK2Node_Variable>(Node)) { SetterNode->CheckForErrors(CompilerContext.GetSchema(), Context.MessageLog); if(FBlueprintEditorUtils::IsPropertyReadOnlyInCurrentBlueprint(Context.Blueprint, SetterNode->GetPropertyForVariable())) { CompilerContext.MessageLog.Warning(*LOCTEXT("BlueprintReadOnlyOrPrivate_Error", "The property is marked as BlueprintReadOnly or Private. It cannot be modifed in the blueprint. @@").ToString(), Node); } // Report an error that the local variable could not be found if(SetterNode->VariableReference.IsLocalScope() && SetterNode->GetPropertyForVariable() == NULL) { FFormatNamedArguments Args; Args.Add(TEXT("VariableName"), FText::FromName(SetterNode->VariableReference.GetMemberName())); if(SetterNode->VariableReference.GetMemberScopeName() != Context.Function->GetName()) { Args.Add(TEXT("ScopeName"), FText::FromString(SetterNode->VariableReference.GetMemberScopeName())); CompilerContext.MessageLog.Warning(*FText::Format(LOCTEXT("LocalVariableNotFoundInScope_Error", "Unable to find local variable with name '{VariableName}' for @@, scope expected: @@, scope found: {ScopeName}"), Args).ToString(), Node, Node->GetGraph()); } else { CompilerContext.MessageLog.Warning(*FText::Format(LOCTEXT("LocalVariableNotFound_Error", "Unable to find local variable with name '{VariableName}' for @@"), Args).ToString(), Node); } } } for (int32 PinIndex = 0; PinIndex < Node->Pins.Num(); ++PinIndex) { UEdGraphPin* Net = Node->Pins[PinIndex]; if (!CompilerContext.GetSchema()->IsMetaPin(*Net) && (Net->Direction == EGPD_Input)) { if (ValidateAndRegisterNetIfLiteral(Context, Net)) { RegisterNet(Context, Net); } } } }
void FNodeHandlingFunctor::RegisterNets(FKismetFunctionContext& Context, UEdGraphNode* Node) { for (int32 PinIndex = 0; PinIndex < Node->Pins.Num(); ++PinIndex) { UEdGraphPin* Pin = Node->Pins[PinIndex]; if (!CompilerContext.GetSchema()->IsMetaPin(*Pin) || (CompilerContext.GetSchema()->IsSelfPin(*Pin) && Pin->LinkedTo.Num() == 0 && Pin->DefaultObject) ) { UEdGraphPin* Net = FEdGraphUtilities::GetNetFromPin(Pin); if (Context.NetMap.Find(Net) == NULL) { // New net, resolve the term that will be used to construct it FBPTerminal* Term = NULL; if ((Net->Direction == EGPD_Input) && (Net->LinkedTo.Num() == 0)) { // Make sure the default value is valid FString DefaultAllowedResult = CompilerContext.GetSchema()->IsCurrentPinDefaultValid(Net); if (DefaultAllowedResult != TEXT("")) { CompilerContext.MessageLog.Error(*FString::Printf(*LOCTEXT("InvalidDefaultValue_Error", "Default value '%s' for @@ is invalid: '%s'").ToString(), *(Net->GetDefaultAsString()), *DefaultAllowedResult), Net); // Skip over these properties if they are array or ref properties, because the backend can't emit valid code for them if( Pin->PinType.bIsArray || Pin->PinType.bIsReference ) { continue; } } Term = Context.RegisterLiteral(Net); Context.NetMap.Add(Net, Term); } else { RegisterNet(Context, Pin); } } } } }