void FScriptBlueprintCompiler::CreateClassVariablesFromBlueprint() { Super::CreateClassVariablesFromBlueprint(); UScriptBlueprint* Blueprint = ScriptBlueprint(); UScriptBlueprintGeneratedClass* NewScripClass = CastChecked<UScriptBlueprintGeneratedClass>(NewClass); NewScripClass->ScriptProperties.Empty(); for (auto& Field : ScriptDefinedFields) { UClass* InnerType = Field.Class; if (Field.Class->IsChildOf(UProperty::StaticClass())) { FString PinCategory; if (Field.Class->IsChildOf(UStrProperty::StaticClass())) { PinCategory = Schema->PC_String; } else if (Field.Class->IsChildOf(UFloatProperty::StaticClass())) { PinCategory = Schema->PC_Float; } else if (Field.Class->IsChildOf(UIntProperty::StaticClass())) { PinCategory = Schema->PC_Int; } else if (Field.Class->IsChildOf(UBoolProperty::StaticClass())) { PinCategory = Schema->PC_Boolean; } else if (Field.Class->IsChildOf(UObjectProperty::StaticClass())) { PinCategory = Schema->PC_Object; // @todo: some scripting extensions (that are strongly typed) can handle this better InnerType = UObject::StaticClass(); } if (!PinCategory.IsEmpty()) { FEdGraphPinType ScriptPinType(PinCategory, TEXT(""), InnerType, false, false); UProperty* ScriptProperty = CreateVariable(Field.Name, ScriptPinType); if (ScriptProperty != NULL) { ScriptProperty->SetMetaData(TEXT("Category"), *Blueprint->GetName()); ScriptProperty->SetPropertyFlags(CPF_BlueprintVisible | CPF_Edit); NewScripClass->ScriptProperties.Add(ScriptProperty); } } } } CreateScriptContextProperty(); }
/** * Reimports specified texture from its source material, if the meta-data exists */ EReimportResult::Type UReimportScriptFactory::Reimport(UObject* Obj) { UScriptBlueprint* ScriptClass = Cast<UScriptBlueprint>(Obj); if (!ScriptClass) { return EReimportResult::Failed; } TGuardValue<UScriptBlueprint*> OriginalScriptGuardValue(OriginalScript, ScriptClass); const FString ResolvedSourceFilePath = FReimportManager::ResolveImportFilename(ScriptClass->SourceFilePath, ScriptClass); if (!ResolvedSourceFilePath.Len()) { return EReimportResult::Failed; } UE_LOG(LogScriptEditorPlugin, Log, TEXT("Performing atomic reimport of [%s]"), *ResolvedSourceFilePath); // Ensure that the file provided by the path exists if (IFileManager::Get().FileSize(*ResolvedSourceFilePath) == INDEX_NONE) { UE_LOG(LogScriptEditorPlugin, Warning, TEXT("Cannot reimport: source file cannot be found.")); return EReimportResult::Failed; } if (UFactory::StaticImportObject(ScriptClass->GetClass(), ScriptClass->GetOuter(), *ScriptClass->GetName(), RF_Public | RF_Standalone, *ResolvedSourceFilePath, NULL, this)) { UE_LOG(LogScriptEditorPlugin, Log, TEXT("Imported successfully")); // Try to find the outer package so we can dirty it up if (ScriptClass->GetOuter()) { ScriptClass->GetOuter()->MarkPackageDirty(); } else { ScriptClass->MarkPackageDirty(); } } else { UE_LOG(LogScriptEditorPlugin, Warning, TEXT("-- import failed")); } return EReimportResult::Succeeded; }