Advertisement
Mellnik

Untitled

Aug 20th, 2019
1,583
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.41 KB | None | 0 0
  1. class FPakFileVisitor : public IPlatformFile::FDirectoryVisitor
  2. {
  3. public:
  4.     virtual bool Visit(const TCHAR* FilenameOrDirectory, bool bIsDirectory) override
  5.     {
  6.         if (!bIsDirectory)
  7.         {
  8.             Files.Add(FilenameOrDirectory);
  9.         }
  10.         return true;
  11.     }
  12.  
  13.     TArray<FString> Files;
  14. };
  15.  
  16. void AModProjectCharacter::LoadPak2()
  17. {
  18.     NLOG(FString::Printf(TEXT("%sPaks/%s-"), *FPaths::ProjectContentDir(), FApp::GetProjectName()));
  19.     NLOG(FString::Printf(TEXT("%s, %s, %s, %s"), *FPaths::ProjectContentDir(), *FPaths::EngineContentDir(), *FPaths::ProjectSavedDir(), *FPaths::ProjectPersistentDownloadDir()));
  20.     NLOG(FString::Printf(TEXT("RootDir: %s"), *FPaths::RootDir()));
  21.  
  22.     if (!FCoreDelegates::OnMountPak.IsBound())
  23.     {
  24.         NLOG(FString::Printf(TEXT("OnMountPak not bound")));
  25.         return;
  26.     }
  27.  
  28.     FString PakLocation = TEXT("D:\\Models\\CubeBrush\\AMilPak\\WindowsNoEditor\\MilitaryVOL1\\Content\\Paks\\MilitaryVOL1-WindowsNoEditor.pak");
  29.  
  30.     FPakFileVisitor Visitor;
  31.     if (FCoreDelegates::OnMountPak.Execute(PakLocation, INDEX_NONE, &Visitor))
  32.     {
  33.         NLOG(FString::Printf(TEXT("Mounted with %i files (PakFile: %s)"), Visitor.Files.Num(), *PakLocation));
  34.  
  35.         for (const FString& InternalPakFileName : Visitor.Files)
  36.         {
  37.             //NLOG(FString::Printf(TEXT("\t\tVISIT: %s"), *InternalPakFileName));
  38.         }
  39.  
  40.         //LogAllAssetsWithClass(UStaticMesh::StaticClass());
  41.         //LogAllAssets();
  42.  
  43.         LogAllMountedPaks();
  44.  
  45.         LogAllMountedPaksWithFiles();
  46.  
  47.         FString StandardFilename("/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a");
  48.         FPaths::MakeStandardFilename(StandardFilename);
  49.         NLOG(FString::Printf(TEXT("StandardFilename: %s, %s"), *StandardFilename, *FPaths::GetPath(StandardFilename)));
  50.  
  51.         // BOTH BELOW WORK:
  52.         TryToStream("/Game/Geometry/Meshes/1M_Cube.1M_Cube");
  53.         TryToStream("/Game/Geometry/Meshes/1M_Cube");
  54.         TryToLoadStatic("StaticMesh'/Game/Geometry/Meshes/1M_Cube.1M_Cube'");
  55.  
  56.         TryToStream("/Game/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  57.         TryToStream("/Game/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  58.         TryToStream("/Game/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  59.         TryToStream("/Game/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  60.  
  61.         TryToStream("MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  62.         TryToStream("/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  63.         TryToStream("/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  64.         TryToStream("/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  65.         TryToStream("/../../../MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  66.         TryToStream("/../../MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  67.         TryToStream("/../MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  68.         TryToStream("/../../../MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  69.         TryToStream("/../../MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  70.         TryToStream("/../MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  71.         TryToStream("/../../../Game/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  72.         TryToStream("/../../Game/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  73.         TryToStream("/../Game/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  74.         TryToStream("/../../../Game/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  75.         TryToStream("/../../Game/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  76.         TryToStream("/../Game/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  77.         TryToStream("/../../../Game/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  78.         TryToStream("/../../Game/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  79.         TryToStream("/../Game/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  80.         TryToStream("/../../../Game/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  81.         TryToStream("/../../Game/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  82.         TryToStream("/../Game/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  83.         TryToStream("/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  84.         TryToStream("/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  85.         TryToStream("/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  86.         TryToStream("/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  87.         TryToStream("/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  88.         TryToStream("/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  89.         TryToStream("/Game/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  90.         TryToStream("/Game/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  91.         TryToStream("/Game/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  92.         TryToStream("/Game/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  93.         TryToStream("/Game/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  94.         TryToStream("/Game/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  95.         TryToStream("/Game/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  96.         TryToStream("/Game/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  97.         TryToStream("/Game/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  98.         TryToStream("/Game/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  99.         TryToStream("/Game/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  100.         TryToStream("/Game/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  101.  
  102.         TryToStream("/../../../MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  103.         TryToStream("/../../MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  104.         TryToStream("/../MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  105.         TryToStream("/../../../MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  106.         TryToStream("/../../MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  107.         TryToStream("/../MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  108.         TryToStream("/../../../Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  109.         TryToStream("/../../Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  110.         TryToStream("/../Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  111.         TryToStream("/../../../Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  112.         TryToStream("/../../Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  113.         TryToStream("/../Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  114.         TryToStream("/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  115.         TryToStream("/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  116.         TryToStream("/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  117.         TryToStream("/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  118.         TryToStream("/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  119.         TryToStream("/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  120.         TryToStream("/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  121.         TryToStream("/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  122.         TryToStream("/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  123.         TryToStream("/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  124.         TryToStream("/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  125.         TryToStream("/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a");
  126.  
  127.         TryToLoadStatic("StaticMesh'/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  128.         TryToLoadStatic("StaticMesh'/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  129.         TryToLoadStatic("StaticMesh'/MilitaryVOL1/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  130.         TryToLoadStatic("StaticMesh'/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  131.         TryToLoadStatic("StaticMesh'/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  132.         TryToLoadStatic("StaticMesh'/MilitaryVOL1/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  133.         TryToLoadStatic("StaticMesh'/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  134.         TryToLoadStatic("StaticMesh'/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  135.         TryToLoadStatic("StaticMesh'/Content/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  136.         TryToLoadStatic("StaticMesh'/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  137.         TryToLoadStatic("StaticMesh'/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  138.         TryToLoadStatic("StaticMesh'/Military_VOL1_Tents/Meshes/SM_Tent_01a.SM_Tent_01a'");
  139.     }
  140.     else
  141.     {
  142.         NLOG(FString::Printf(TEXT("OnMountPak failed execute")));
  143.     }
  144. }
  145.  
  146. void AModProjectCharacter::LogAllAssetsWithClass(const UClass *Class)
  147. {
  148.     // https://docs.unrealengine.com/en-US/Programming/Assets/Registry/index.html
  149.  
  150.     FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>("AssetRegistry");
  151.     TArray<FAssetData> AssetData;
  152.     AssetRegistryModule.Get().GetAssetsByClass(Class->GetFName(), AssetData);
  153.  
  154.     NLOG("");
  155.  
  156.     for (auto Asset : AssetData)
  157.     {
  158.         FString AssName;
  159.         Asset.GetFullName(AssName);
  160.         NLOG(FString::Printf(TEXT("\t\tAssName: %s"), *AssName));
  161.     }
  162. }
  163.  
  164. void AModProjectCharacter::LogAllAssets()
  165. {
  166.     FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>("AssetRegistry");
  167.  
  168.     /*TArray<FString> ScanPaths;
  169.     ScanPaths.Add("/");
  170.     AssetRegistryModule.Get().ScanPathsSynchronous(ScanPaths, true);*/
  171.  
  172.     TArray<FAssetData> AssetData;
  173.     AssetRegistryModule.Get().GetAllAssets(AssetData);
  174.  
  175.     NLOG("");
  176.  
  177.     for (auto Asset : AssetData)
  178.     {
  179.         FString AssName;
  180.         Asset.GetFullName(AssName);
  181.         NLOG(FString::Printf(TEXT("\t\tAssName: %s"), *AssName));
  182.     }
  183. }
  184.  
  185. void AModProjectCharacter::LogAllMountedPaks()
  186. {
  187.     FPakPlatformFile* PakPlatformFile = (FPakPlatformFile*)(FPlatformFileManager::Get().FindPlatformFile(TEXT("PakFile")));
  188.     if (!PakPlatformFile)
  189.         return;
  190.  
  191.     TArray<FString> MountedPakFiles;
  192.     PakPlatformFile->GetMountedPakFilenames(MountedPakFiles);
  193.  
  194.     NLOG("");
  195.  
  196.     for (auto PakFileName : MountedPakFiles)
  197.     {
  198.         FString PakFilePathFull = FPaths::ConvertRelativePathToFull(PakFileName);
  199.         FPakFile PakFile(PakPlatformFile, *PakFilePathFull, false);
  200.  
  201.         NLOG(FString::Printf(TEXT("\t\tMounted Pak: %s, PakFilePathFull: %s"), *PakFileName, *PakFilePathFull));
  202.         NLOG(FString::Printf(TEXT("\t\tMountPoint: %s"), *PakFile.GetMountPoint()));
  203.     }
  204. }
  205.  
  206. void AModProjectCharacter::LogAllMountedPaksWithFiles()
  207. {
  208.     FPakPlatformFile* PakPlatformFile = (FPakPlatformFile*)(FPlatformFileManager::Get().FindPlatformFile(TEXT("PakFile")));
  209.     if (!PakPlatformFile)
  210.         return;
  211.  
  212.     TArray<FString> MountedPakFiles;
  213.     PakPlatformFile->GetMountedPakFilenames(MountedPakFiles);
  214.  
  215.     NLOG("");
  216.  
  217.     for (auto PakFileName : MountedPakFiles)
  218.     {
  219.         FString PakFilePathFull = FPaths::ConvertRelativePathToFull(PakFileName);
  220.         FPakFile PakFile(PakPlatformFile, *PakFilePathFull, false);
  221.  
  222.         NLOG(FString::Printf(TEXT("\t\tMounted Pak: %s, PakFilePathFull: %s"), *PakFileName, *PakFilePathFull));
  223.         NLOG(FString::Printf(TEXT("\t\tMountPoint: %s"), *PakFile.GetMountPoint()));
  224.  
  225.         TArray<FString> FileList;
  226.         PakFile.FindFilesAtPath(FileList, *PakFile.GetMountPoint(), true, false, true);
  227.  
  228.         for (auto File : FileList)
  229.         {
  230.             NLOG(FString::Printf(TEXT("\t\t\t\tFile: %s"), *File));
  231.  
  232.             FString GamePathName;
  233.             bool bRes = FPackageName::TryConvertFilenameToLongPackageName(FPaths::GetPath(File), GamePathName);
  234.             FString AssetShortName = FPackageName::GetShortName(File);
  235.             FString FileName, FileExt;
  236.             AssetShortName.Split(TEXT("."), &FileName, &FileExt);
  237.  
  238.             if (FileExt == "uexp" || FileExt == "ubulk") continue;
  239.             else
  240.             {
  241.                 FString NewAssetName = GamePathName + TEXT(".") + FileName;
  242.                 NLOG(FString::Printf(TEXT("\t\t\t\t\t->%i, GamePathName: %s, FileExt: %s, AssetShortName: %s"), (int)bRes, *GamePathName, *FileExt, *AssetShortName));
  243.             }
  244.         }
  245.     }
  246. }
  247.  
  248. void AModProjectCharacter::TryToStream(FString FileWithPath)
  249. {
  250.     NLOG(FString::Printf(TEXT("TryToStream: %s"), *FileWithPath));
  251.  
  252.     FStreamableManager StreamableManager;
  253.  
  254.     FSoftObjectPath SoftRef(*FileWithPath);
  255.     UObject *LoadObj = StreamableManager.LoadSynchronous(SoftRef);
  256.     if (!LoadObj)
  257.     {
  258.         NLOG(FString::Printf(TEXT("\tLoadSynchronous FAILED!")));
  259.     }
  260.     else
  261.     {
  262.         NLOG(FString::Printf(TEXT("\tLoadSynchronous OK - LoadObj %s, %s, %s"), *GetNameSafe(LoadObj), *LoadObj->StaticClass()->GetFName().ToString(), *GetNameSafe(LoadObj->GetClass())));
  263.     }
  264.  
  265.     auto res = StreamableManager.RequestSyncLoad(SoftRef, true);
  266.     if (res && res.IsValid() && res->HasLoadCompleted())
  267.     {
  268.         int32 L, R;
  269.         res->GetLoadedCount(L, R);
  270.         NLOG(FString::Printf(TEXT("\tL %i, R %i"), L, R));
  271.  
  272.         auto TL = Cast<UStaticMesh>(SoftRef.ResolveObject());
  273.         NLOG(FString::Printf(TEXT("\tSM: %i"), TL ? 1 : 0));
  274.  
  275.     }
  276.     else
  277.     {
  278.         NLOG(FString::Printf(TEXT("\tRequestSyncLoad FAILED!")));
  279.     }
  280. }
  281.  
  282. void AModProjectCharacter::TryToLoadStatic(FString FileWithPath)
  283. {
  284.     NLOG(FString::Printf(TEXT("TryToLoadStatic: %s"), *FileWithPath));
  285.     auto res = StaticLoadObject(UStaticMesh::StaticClass(), nullptr, *FileWithPath);
  286.     NLOG(FString::Printf(TEXT("\tres: %i"), res ? 1 : 0));
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement