void FAssetTypeActions_AnimationAsset::OpenAssetEditor( const TArray<UObject*>& InObjects, TSharedPtr<IToolkitHost> EditWithinLevelEditor ) { EToolkitMode::Type Mode = EditWithinLevelEditor.IsValid() ? EToolkitMode::WorldCentric : EToolkitMode::Standalone; for (auto ObjIt = InObjects.CreateConstIterator(); ObjIt; ++ObjIt) { auto AnimAsset = Cast<UAnimationAsset>(*ObjIt); if (AnimAsset != NULL) { USkeleton* AnimSkeleton = AnimAsset->GetSkeleton(); if (!AnimSkeleton) { FText ShouldRetargetMessage = LOCTEXT("ShouldRetargetAnimAsset_Message", "Could not find the skeleton for Anim '{AnimName}' Would you like to choose a new one?"); FFormatNamedArguments Arguments; Arguments.Add( TEXT("AnimName"), FText::FromString(AnimAsset->GetName())); if ( FMessageDialog::Open(EAppMsgType::YesNo, FText::Format(ShouldRetargetMessage, Arguments)) == EAppReturnType::Yes ) { bool bDuplicateAssets = false; TArray<UObject*> AnimAssets; AnimAssets.Add(AnimAsset); RetargetAssets(AnimAssets, bDuplicateAssets, true, EditWithinLevelEditor); } } else if (AnimSkeleton) { const bool bBringToFrontIfOpen = false; if (IAssetEditorInstance* EditorInstance = FAssetEditorManager::Get().FindEditorForAsset(AnimSkeleton, bBringToFrontIfOpen)) { // The skeleton is already open in an editor. // Tell persona that an animation asset was requested EditorInstance->FocusWindow(AnimAsset); } else { FPersonaModule& PersonaModule = FModuleManager::LoadModuleChecked<FPersonaModule>( "Persona" ); PersonaModule.CreatePersona(Mode, EditWithinLevelEditor, AnimSkeleton, NULL, AnimAsset, NULL); } } } } }
void FAssetTypeActions_AnimBlueprint::OpenAssetEditor( const TArray<UObject*>& InObjects, TSharedPtr<IToolkitHost> EditWithinLevelEditor ) { EToolkitMode::Type Mode = EditWithinLevelEditor.IsValid() ? EToolkitMode::WorldCentric : EToolkitMode::Standalone; for (auto ObjIt = InObjects.CreateConstIterator(); ObjIt; ++ObjIt) { auto AnimBlueprint = Cast<UAnimBlueprint>(*ObjIt); if (AnimBlueprint != NULL && AnimBlueprint->SkeletonGeneratedClass && AnimBlueprint->GeneratedClass) { if(!AnimBlueprint->TargetSkeleton) { FText ShouldRetargetMessage = LOCTEXT("ShouldRetarget_Message", "Could not find the skeleton for Anim Blueprint '{BlueprintName}' Would you like to choose a new one?"); FFormatNamedArguments Arguments; Arguments.Add( TEXT("BlueprintName"), FText::FromString(AnimBlueprint->GetName())); if ( FMessageDialog::Open(EAppMsgType::YesNo, FText::Format(ShouldRetargetMessage, Arguments)) == EAppReturnType::Yes ) { bool bDuplicateAssets = false; TArray<UObject*> AnimBlueprints; AnimBlueprints.Add(AnimBlueprint); RetargetAssets(AnimBlueprints, bDuplicateAssets); } } if(AnimBlueprint->TargetSkeleton) { FPersonaModule& PersonaModule = FModuleManager::LoadModuleChecked<FPersonaModule>( "Persona" ); PersonaModule.CreatePersona( Mode, EditWithinLevelEditor, NULL, AnimBlueprint, NULL, NULL); } else { FMessageDialog::Open( EAppMsgType::Ok, LOCTEXT("FailedToLoadSkeletonlessAnimBlueprint", "The Anim Blueprint could not be loaded because it's skeleton is missing.")); } } else { FMessageDialog::Open( EAppMsgType::Ok, LOCTEXT("FailedToLoadCorruptAnimBlueprint", "The Anim Blueprint could not be loaded because it is corrupt.")); } } }