void FChunkManifestGenerator::OnAssetLoaded(UObject* Asset) { if (Asset != NULL) { UPackage* AssetPackage = CastChecked<UPackage>(Asset->GetOutermost()); if (!AssetsLoadedWithLastPackage.Contains(AssetPackage->GetFName())) { AssetsLoadedWithLastPackage.Add(AssetPackage->GetFName()); } } }
void UWorldComposition::OnLevelPostLoad(ULevel* InLevel) { UPackage* LevelPackage = Cast<UPackage>(InLevel->GetOutermost()); if (LevelPackage && InLevel->OwningWorld) { FWorldTileInfo Info; UWorld* World = InLevel->OwningWorld; if (World->WorldComposition) { // Assign WorldLevelInfo previously loaded by world composition FWorldCompositionTile* Tile = World->WorldComposition->FindTileByName(LevelPackage->GetFName()); if (Tile) { Info = Tile->Info; } } else { #if WITH_EDITOR // Preserve FWorldTileInfo in case sub-level was loaded in the editor outside of world composition FString PackageFilename = FPackageName::LongPackageNameToFilename(LevelPackage->GetName(), FPackageName::GetMapPackageExtension()); FWorldTileInfo::Read(PackageFilename, Info); #endif //WITH_EDITOR } const bool bIsDefault = (Info == FWorldTileInfo()); if (!bIsDefault) { LevelPackage->WorldTileInfo = new FWorldTileInfo(Info); } } }
TSharedPtr<SWidget> Get(const FActorTreeItem& ActorItem) const override { if (AActor* Actor = ActorItem.Actor.Get()) { if (UClass* ActorClass = Actor->GetClass()) { // Always show blueprints const bool bIsBlueprintClass = UBlueprint::GetBlueprintFromClass(ActorClass) != nullptr; // Also show game or game plugin native classes (but not engine classes as that makes the scene outliner pretty noisy) bool bIsGameClass = false; if (!bIsBlueprintClass) { UPackage* Package = ActorClass->GetOutermost(); const FString ModuleName = FPackageName::GetShortName(Package->GetFName()); FModuleStatus PackageModuleStatus; if (FModuleManager::Get().QueryModule(*ModuleName, /*out*/ PackageModuleStatus)) { bIsGameClass = PackageModuleStatus.bIsGameModule; } } if (bIsBlueprintClass || bIsGameClass) { return FEditorClassUtils::GetSourceLink(ActorClass, Actor); } } } return nullptr; }
void FAssetFixUpRedirectors::DetectReadOnlyPackages(TArray<FRedirectorRefs>& RedirectorsToFix, TArray<UPackage*>& InOutReferencingPackagesToSave) const { // For each valid package... for ( int32 PackageIdx = InOutReferencingPackagesToSave.Num() - 1; PackageIdx >= 0; --PackageIdx ) { UPackage* Package = InOutReferencingPackagesToSave[PackageIdx]; if ( Package ) { // Find the package filename FString Filename; if ( FPackageName::DoesPackageExist(Package->GetName(), NULL, &Filename) ) { // If the file is read only if ( IFileManager::Get().IsReadOnly(*Filename) ) { FName PackageName = Package->GetFName(); // Find all assets that were referenced by this package to create a redirector when named for ( auto RedirectorIt = RedirectorsToFix.CreateIterator(); RedirectorIt; ++RedirectorIt ) { FRedirectorRefs& RedirectorRefs = *RedirectorIt; if ( RedirectorRefs.ReferencingPackageNames.Contains(PackageName) ) { RedirectorRefs.FailureReason = FText::Format(LOCTEXT("RedirectorFixupFailed_ReadOnly", "Referencing package {0} was read-only"), FText::FromName(PackageName)); RedirectorRefs.bRedirectorValidForFixup = false; } } // Remove the package from the save list InOutReferencingPackagesToSave.RemoveAt(PackageIdx); } } } } }