void FMediaTextureActions::ExecuteCreateMaterial( TArray<TWeakObjectPtr<UTexture>> Objects ) { IContentBrowserSingleton& ContentBrowserSingleton = FModuleManager::LoadModuleChecked<FContentBrowserModule>("ContentBrowser").Get(); const FString DefaultSuffix = TEXT("_Mat"); if (Objects.Num() == 1) { auto Object = Objects[0].Get(); if (Object != nullptr) { // Determine an appropriate name FString Name; FString PackagePath; CreateUniqueAssetName(Object->GetOutermost()->GetName(), DefaultSuffix, PackagePath, Name); // Create the factory used to generate the asset UMaterialFactoryNew* Factory = NewObject<UMaterialFactoryNew>(); Factory->InitialTexture = Object; ContentBrowserSingleton.CreateNewAsset(Name, FPackageName::GetLongPackagePath(PackagePath), UMaterial::StaticClass(), Factory); } } else { TArray<UObject*> ObjectsToSync; for (auto ObjIt = Objects.CreateConstIterator(); ObjIt; ++ObjIt) { auto Object = (*ObjIt).Get(); if (Object != nullptr) { FString Name; FString PackageName; CreateUniqueAssetName(Object->GetOutermost()->GetName(), DefaultSuffix, PackageName, Name); // Create the factory used to generate the asset UMaterialFactoryNew* Factory = NewObject<UMaterialFactoryNew>(); Factory->InitialTexture = Object; FAssetToolsModule& AssetToolsModule = FModuleManager::GetModuleChecked<FAssetToolsModule>("AssetTools"); UObject* NewAsset = AssetToolsModule.Get().CreateAsset(Name, FPackageName::GetLongPackagePath(PackageName), UMaterial::StaticClass(), Factory); if (NewAsset != nullptr) { ObjectsToSync.Add(NewAsset); } } } if (ObjectsToSync.Num() > 0) { ContentBrowserSingleton.SyncBrowserToAssets(ObjectsToSync); } } }
void FAssetTypeActions_MaterialInterface::ExecuteNewMIC(TArray<TWeakObjectPtr<UMaterialInterface>> Objects) { const FString DefaultSuffix = TEXT("_Inst"); if ( Objects.Num() == 1 ) { auto Object = Objects[0].Get(); if ( Object ) { // Create an appropriate and unique name FString Name; FString PackageName; CreateUniqueAssetName(Object->GetOutermost()->GetName(), DefaultSuffix, PackageName, Name); UMaterialInstanceConstantFactoryNew* Factory = NewObject<UMaterialInstanceConstantFactoryNew>(); Factory->InitialParent = Object; FContentBrowserModule& ContentBrowserModule = FModuleManager::LoadModuleChecked<FContentBrowserModule>("ContentBrowser"); ContentBrowserModule.Get().CreateNewAsset(Name, FPackageName::GetLongPackagePath(PackageName), UMaterialInstanceConstant::StaticClass(), Factory); } } else { TArray<UObject*> ObjectsToSync; for (auto ObjIt = Objects.CreateConstIterator(); ObjIt; ++ObjIt) { auto Object = (*ObjIt).Get(); if ( Object ) { // Determine an appropriate name FString Name; FString PackageName; CreateUniqueAssetName(Object->GetOutermost()->GetName(), DefaultSuffix, PackageName, Name); // Create the factory used to generate the asset UMaterialInstanceConstantFactoryNew* Factory = NewObject<UMaterialInstanceConstantFactoryNew>(); Factory->InitialParent = Object; FAssetToolsModule& AssetToolsModule = FModuleManager::GetModuleChecked<FAssetToolsModule>("AssetTools"); UObject* NewAsset = AssetToolsModule.Get().CreateAsset(Name, FPackageName::GetLongPackagePath(PackageName), UMaterialInstanceConstant::StaticClass(), Factory); if ( NewAsset ) { ObjectsToSync.Add(NewAsset); } } } if ( ObjectsToSync.Num() > 0 ) { FAssetTools::Get().SyncBrowserToAssets(ObjectsToSync); } } }
void FAssetTypeActions_EditorUtilityBlueprint::ExecuteNewDerivedBlueprint(TWeakObjectPtr<UEditorUtilityBlueprint> InObject) { if (auto Object = InObject.Get()) { // The menu option should ONLY be available if there is only one blueprint selected, validated by the menu creation code UBlueprint* TargetBP = Object; UClass* TargetClass = TargetBP->GeneratedClass; if (!FKismetEditorUtilities::CanCreateBlueprintOfClass(TargetClass)) { FMessageDialog::Open(EAppMsgType::Ok, LOCTEXT("InvalidClassToMakeBlueprintFrom", "Invalid class with which to make a Blueprint.")); return; } FString Name; FString PackageName; CreateUniqueAssetName(Object->GetOutermost()->GetName(), TEXT("_Child"), PackageName, Name); UPackage* Package = CreatePackage(NULL, *PackageName); if (ensure(Package)) { // Create and init a new Blueprint if (UBlueprint* NewBP = FKismetEditorUtilities::CreateBlueprint(TargetClass, Package, FName(*Name), BPTYPE_Normal, UEditorUtilityBlueprint::StaticClass(), UBlueprintGeneratedClass::StaticClass())) { FAssetEditorManager::Get().OpenEditorForAsset(NewBP); // Notify the asset registry FAssetRegistryModule::AssetCreated(NewBP); // Mark the package dirty... Package->MarkPackageDirty(); } } } }
void FAssetTypeActions_TextureRenderTarget::ExecuteCreateStatic(TArray<TWeakObjectPtr<UTextureRenderTarget>> Objects) { for (auto ObjIt = Objects.CreateConstIterator(); ObjIt; ++ObjIt) { auto Object = (*ObjIt).Get(); if ( Object ) { FString Name; FString PackageName; CreateUniqueAssetName(Object->GetOutermost()->GetName(), TEXT("_Tex"), PackageName, Name); UObject* NewObj = NULL; UTextureRenderTarget2D* TexRT = Cast<UTextureRenderTarget2D>(Object); UTextureRenderTargetCube* TexRTCube = Cast<UTextureRenderTargetCube>(Object); if( TexRTCube ) { // create a static cube texture as well as its 6 faces NewObj = TexRTCube->ConstructTextureCube( CreatePackage(NULL,*PackageName), Name, Object->GetMaskedFlags() ); } else if( TexRT ) { // create a static 2d texture NewObj = TexRT->ConstructTexture2D( CreatePackage(NULL,*PackageName), Name, Object->GetMaskedFlags(), CTF_Default, NULL ); } if( NewObj ) { // package needs saving NewObj->MarkPackageDirty(); // Notify the asset registry FAssetRegistryModule::AssetCreated(NewObj); } } } }
void FAssetTypeActions_SoundCue::ExecuteConsolidateAttenuation(TArray<TWeakObjectPtr<USoundCue>> Objects) { TMap<FAttenuationSettings*,TArray<USoundCue*>> UnmatchedAttenuations; for (auto ObjIt = Objects.CreateConstIterator(); ObjIt; ++ObjIt) { USoundCue* SoundCue = (*ObjIt).Get(); bool bFound = false; if ( SoundCue && SoundCue->bOverrideAttenuation ) { for (auto UnmatchedIt = UnmatchedAttenuations.CreateIterator(); UnmatchedIt; ++UnmatchedIt) { // Found attenuation settings to consolidate together if (SoundCue->AttenuationOverrides == *UnmatchedIt.Key()) { UnmatchedIt.Value().Add(SoundCue); bFound = true; break; } } if (!bFound) { UnmatchedAttenuations.FindOrAdd(&SoundCue->AttenuationOverrides).Add(SoundCue); } } } if (UnmatchedAttenuations.Num() > 0) { FString DefaultSuffix; TArray<UObject*> ObjectsToSync; FAssetToolsModule& AssetToolsModule = FModuleManager::GetModuleChecked<FAssetToolsModule>("AssetTools"); USoundAttenuationFactory* Factory = ConstructObject<USoundAttenuationFactory>(USoundAttenuationFactory::StaticClass()); for (auto UnmatchedIt = UnmatchedAttenuations.CreateConstIterator(); UnmatchedIt; ++UnmatchedIt) { if (UnmatchedIt.Value().Num() > 1) { FString Name; FString PackageName; CreateUniqueAssetName("/Game/Sounds/SoundAttenuations/SharedAttenuation", DefaultSuffix, PackageName, Name); USoundAttenuation* SoundAttenuation = Cast<USoundAttenuation>(AssetToolsModule.Get().CreateAsset(Name, FPackageName::GetLongPackagePath(PackageName), USoundAttenuation::StaticClass(), Factory)); if (SoundAttenuation) { SoundAttenuation->Attenuation = *UnmatchedIt.Key(); for (int32 SoundCueIndex = 0; SoundCueIndex < UnmatchedIt.Value().Num(); ++SoundCueIndex) { USoundCue* SoundCue = UnmatchedIt.Value()[SoundCueIndex]; SoundCue->bOverrideAttenuation = false; SoundCue->AttenuationSettings = SoundAttenuation; SoundCue->MarkPackageDirty(); } } } } if ( ObjectsToSync.Num() > 0 ) { FAssetTools::Get().SyncBrowserToAssets(ObjectsToSync); } } }
void FAssetTypeActions_SoundWave::ExecuteCreateDialogueWave(const class FAssetData& AssetData, TArray<TWeakObjectPtr<USoundWave>> Objects) { const FString DefaultSuffix = TEXT("_Dialogue"); UDialogueVoice* DialogueVoice = Cast<UDialogueVoice>(AssetData.GetAsset()); if (Objects.Num() == 1) { auto Object = Objects[0].Get(); if (Object) { // Determine an appropriate name FString Name; FString PackagePath; CreateUniqueAssetName(Object->GetOutermost()->GetName(), DefaultSuffix, PackagePath, Name); // Create the factory used to generate the asset UDialogueWaveFactory* Factory = NewObject<UDialogueWaveFactory>(); Factory->InitialSoundWave = Object; Factory->InitialSpeakerVoice = DialogueVoice; Factory->HasSetInitialTargetVoice = true; FContentBrowserModule& ContentBrowserModule = FModuleManager::LoadModuleChecked<FContentBrowserModule>("ContentBrowser"); ContentBrowserModule.Get().CreateNewAsset(Name, FPackageName::GetLongPackagePath(PackagePath), UDialogueWave::StaticClass(), Factory); } } else { TArray<UObject*> ObjectsToSync; for (auto ObjIt = Objects.CreateConstIterator(); ObjIt; ++ObjIt) { auto Object = (*ObjIt).Get(); if (Object) { FString Name; FString PackageName; CreateUniqueAssetName(Object->GetOutermost()->GetName(), DefaultSuffix, PackageName, Name); // Create the factory used to generate the asset UDialogueWaveFactory* Factory = NewObject<UDialogueWaveFactory>(); Factory->InitialSoundWave = Object; Factory->InitialSpeakerVoice = DialogueVoice; Factory->HasSetInitialTargetVoice = true; FAssetToolsModule& AssetToolsModule = FModuleManager::GetModuleChecked<FAssetToolsModule>("AssetTools"); UObject* NewAsset = AssetToolsModule.Get().CreateAsset(Name, FPackageName::GetLongPackagePath(PackageName), UDialogueWave::StaticClass(), Factory); if (NewAsset) { ObjectsToSync.Add(NewAsset); } } } if (ObjectsToSync.Num() > 0) { FAssetTools::Get().SyncBrowserToAssets(ObjectsToSync); } } }
void FAssetTypeActions_Texture::ExecuteCreateSubUVAnimation(TArray<TWeakObjectPtr<UTexture>> Objects) { const FString DefaultSuffix = TEXT("_SubUV"); if ( Objects.Num() == 1 ) { UTexture2D* Object = Cast<UTexture2D>(Objects[0].Get()); if ( Object ) { // Determine an appropriate name FString Name; FString PackagePath; CreateUniqueAssetName(Object->GetOutermost()->GetName(), DefaultSuffix, PackagePath, Name); // Create the factory used to generate the asset USubUVAnimationFactory* Factory = NewObject<USubUVAnimationFactory>(); Factory->InitialTexture = Object; FContentBrowserModule& ContentBrowserModule = FModuleManager::LoadModuleChecked<FContentBrowserModule>("ContentBrowser"); ContentBrowserModule.Get().CreateNewAsset(Name, FPackageName::GetLongPackagePath(PackagePath), USubUVAnimation::StaticClass(), Factory); } } else { TArray<UObject*> ObjectsToSync; for (auto ObjIt = Objects.CreateConstIterator(); ObjIt; ++ObjIt) { UTexture2D* Object = Cast<UTexture2D>((*ObjIt).Get()); if ( Object ) { FString Name; FString PackageName; CreateUniqueAssetName(Object->GetOutermost()->GetName(), DefaultSuffix, PackageName, Name); // Create the factory used to generate the asset USubUVAnimationFactory* Factory = NewObject<USubUVAnimationFactory>(); Factory->InitialTexture = Object; FAssetToolsModule& AssetToolsModule = FModuleManager::GetModuleChecked<FAssetToolsModule>("AssetTools"); UObject* NewAsset = AssetToolsModule.Get().CreateAsset(Name, FPackageName::GetLongPackagePath(PackageName), USubUVAnimation::StaticClass(), Factory); if ( NewAsset ) { ObjectsToSync.Add(NewAsset); } } } if ( ObjectsToSync.Num() > 0 ) { FAssetTools::Get().SyncBrowserToAssets(ObjectsToSync); } } }