示例#1
0
        public BeatSaberQuestomConfig GetCurrentConfig(bool suppressImages = false)
        {
            using (var apkFileProvider = new ApkAssetsFileProvider(_apkFilename, ApkAssetsFileProvider.FileCacheMode.Memory, true))
            {
                var manager = new AssetsManager(apkFileProvider, BSConst.GetAssetTypeMap(), false);
                manager.GetAssetsFile("globalgamemanagers");
                var file11          = manager.GetAssetsFile(BSConst.KnownFiles.File11);
                var basicSaberModel = file11.FindAsset <GameObject>(x => x.Object.Name == "BasicSaberModel");
                var basicSaber      = file11.FindAsset <GameObject>(x => x.Object.Name == "BasicSaber");

                var config = GetConfig(manager, suppressImages);

                //clear out any of the internal refs that were used so the GC can clean things up
                foreach (var p in config.Playlists)
                {
                    p.CoverArtSprite  = null;
                    p.LevelPackObject = null;
                    foreach (var song in p.SongList)
                    {
                        song.LevelData = null;
                        song.SourceOgg = null;
                    }
                }
                config.Saber = new SaberModel()
                {
                    SaberID = GetCurrentSaberID(manager)
                };
                return(config);
            }
        }
示例#2
0
 /// <summary>
 /// Create a new instance of the class and open the apk file
 /// </summary>
 public QuestomAssetsEngine(QaeConfig config)
 {
     _config          = config;
     _assetsLoadOrder = GetAssetsLoadOrderFile();
     if (_assetsLoadOrder == null)
     {
         _assetsLoadOrder = new List <string>()
         {
             "globalgamemanagers",
             "globalgamemanagers.assets",
             "sharedassets1.assets",
             "231368cb9c1d5dd43988f2a85226e7d7",
             "sharedassets11.assets",
             "sharedassets18.assets",
             "sharedassets20.assets"
         };
     }
     _manager = new AssetsManager(_config.FileProvider, _config.AssetsPath, BSConst.GetAssetTypeMap());
 }
示例#3
0
        public void UpdateConfig(BeatSaberQuestomConfig config)
        {
            //todo: basic validation of the config
            if (_readOnly)
            {
                throw new InvalidOperationException("Cannot update in read only mode.");
            }

            using (var apkFileProvider = new ApkAssetsFileProvider(_apkFilename, ApkAssetsFileProvider.FileCacheMode.Memory, false))
            {
                var manager = new AssetsManager(apkFileProvider, BSConst.GetAssetTypeMap(), false);
                manager.GetAssetsFile("globalgamemanagers");

                //get existing playlists and their songs
                //compare with new ones
                //generate a diff
                //etc.

                UpdateColorConfig(manager, config.Colors);

                UpdateTextConfig(manager, config.TextChanges);

                if (!UpdateSaberConfig(manager, config.Saber))
                {
                    Log.LogErr("Saber failed to update.  Aborting all changes.");
                }

                if (config.Playlists != null)
                {
                    UpdateMusicConfig(manager, config, apkFileProvider);
                }
                else
                {
                    Log.LogMsg("Playlists is null, song configuration will not be changed.");
                }

                Log.LogMsg("Serializing all assets...");
                manager.WriteAllOpenAssets();

                apkFileProvider.Save();
            }
        }
示例#4
0
        private void BtnLoad_Click(object sender, EventArgs e)
        {
            ContextMenu cm = new ContextMenu(new MenuItem[]
            {
                new MenuItem("APK", (s, e2) =>
                {
                    OpenFileDialog ofd = new OpenFileDialog()
                    {
                        CheckFileExists = true,
                        Title           = "Open Bundle File",
                        Multiselect     = false
                    };
                    if (ofd.ShowDialog() == DialogResult.Cancel)
                    {
                        return;
                    }
                    CloseStuff();
                    try
                    {
                        _fileProvider = new ApkAssetsFileProvider(ofd.FileName, FileCacheMode.Memory, false);
                        _manager      = new AssetsManager(_fileProvider, BSConst.KnownFiles.AssetsRootPath, BSConst.GetAssetTypeMap());
                        if (_fileProvider.FindFiles("globalgamemanagers").Count > 0)
                        {
                            _manager.GetAssetsFile("globalgamemanagers.assets");
                        }
                        if (_fileProvider.FindFiles("globalgamemanagers.assets*").Count > 0)
                        {
                            _manager.GetAssetsFile("globalgamemanagers.assets");
                        }
                        _manager.FindAndLoadAllAssets();
                        FillAssetsFiles();
                        this.Text = "Assets Explorer - " + Path.GetFileName(ofd.FileName);
                    }
                    catch (Exception ex)
                    {
                        Log.LogErr("Couldn't load APK!", ex);
                        MessageBox.Show("Failed to load!");
                        if (_fileProvider != null)
                        {
                            _fileProvider.Dispose();
                            _fileProvider = null;
                        }
                        return;
                    }
                }),
                new MenuItem("Folder", (s, e2) =>
                {
                    FolderBrowserDialog fbd = new FolderBrowserDialog()
                    {
                        ShowNewFolderButton = false,
                        Description         = "Select Assets Root Folder"
                    };
                    if (fbd.ShowDialog() == DialogResult.Cancel)
                    {
                        return;
                    }
                    CloseStuff();
                    try
                    {
                        _fileProvider = new FolderFileProvider(fbd.SelectedPath, false);
                        _manager      = new AssetsManager(_fileProvider, "", BSConst.GetAssetTypeMap());
                        if (_fileProvider.FindFiles("globalgamemanagers").Count > 0)
                        {
                            _manager.GetAssetsFile("globalgamemanagers.assets");
                        }
                        if (_fileProvider.FindFiles("globalgamemanagers.assets*").Count > 0)
                        {
                            _manager.GetAssetsFile("globalgamemanagers.assets");
                        }
                        _manager.FindAndLoadAllAssets();
                        FillAssetsFiles();
                        this.Text = "Assets Explorer - " + Path.GetFileName(fbd.SelectedPath);
                    }
                    catch (Exception ex)
                    {
                        Log.LogErr("Couldn't load APK!", ex);
                        MessageBox.Show("Failed to load!");
                        if (_fileProvider != null)
                        {
                            _fileProvider.Dispose();
                            _fileProvider = null;
                        }
                        return;
                    }
                }),
                new MenuItem("Bundle", (s, e2) =>
                {
                    OpenFileDialog ofd = new OpenFileDialog()
                    {
                        CheckFileExists = true,
                        Title           = "Open Bundle File",
                        Multiselect     = false
                    };
                    if (ofd.ShowDialog() == DialogResult.Cancel)
                    {
                        return;
                    }
                    CloseStuff();
                    try
                    {
                        _fileProvider = new BundleFileProvider(ofd.FileName, true);
                        _manager      = new AssetsManager(_fileProvider, "", BSConst.GetAssetTypeMap());
                        _manager.FindAndLoadAllAssets();
                        FillAssetsFiles();
                        this.Text = "Assets Explorer - " + Path.GetFileName(ofd.FileName);
                    }
                    catch (Exception ex)
                    {
                        Log.LogErr("Couldn't load bundle!", ex);
                        MessageBox.Show("Failed to load!");
                        if (_fileProvider != null)
                        {
                            _fileProvider.Dispose();
                            _fileProvider = null;
                        }
                        return;
                    }
                })
            });

            cm.Show(btnLoad, new Point(0, btnLoad.Height));
            return;
        }