// ReSharper disable once InconsistentNaming
        public List <CustSaber> GetModsFromIPA()
        {
            List <CustSaber> modsList = new List <CustSaber>();

            foreach (string sab in Plugin.RetrieveCustomSabers())
            {
                var             tempbundle    = AssetBundle.LoadFromFile(sab);
                GameObject      sabroot       = tempbundle.LoadAsset <GameObject>("_customsaber");
                SaberDescriptor tempdesciptor = sabroot.GetComponent <SaberDescriptor>();
                CustSaber       tempsab       = new CustSaber();
                if (tempdesciptor == null)
                {
                    tempsab.Name   = sab.Split('/').Last().Split('.').First();
                    tempsab.Author = "THIS SHOULD NEVER HAPPEN";
                    tempsab.Path   = sab;
                }
                else
                {
                    tempsab.Name   = tempdesciptor.SaberName;
                    tempsab.Author = tempdesciptor.AuthorName;
                    tempsab.Path   = sab;
                }

                modsList.Add(tempsab);
                tempbundle.Unload(true);
            }
            Console.WriteLine("Added all sabers");
            return(modsList.ToList());
        }
Ejemplo n.º 2
0
        public CustomSaberData(string fileName)
        {
            FileName = fileName;

            if (fileName != "DefaultSabers")
            {
                try
                {
                    AssetBundle           = AssetBundle.LoadFromFile(Path.Combine(Plugin.PluginAssetPath, fileName));
                    Sabers                = AssetBundle.LoadAsset <GameObject>("_CustomSaber");
                    Descriptor            = Sabers.GetComponent <SaberDescriptor>();
                    Descriptor.CoverImage = Descriptor.CoverImage ?? Utils.GetDefaultCoverImage();
                }
                catch
                {
                    Logger.log.Warn($"Something went wrong getting the AssetBundle for '{fileName}'!");

                    Descriptor = new SaberDescriptor
                    {
                        SaberName  = "Invalid Saber (Delete it)",
                        AuthorName = fileName,
                        CoverImage = Utils.GetErrorCoverImage()
                    };

                    ErrorMessage = $"File: '{fileName}'" +
                                   "\n\nThis file failed to load." +
                                   "\n\nThis may have been caused by having duplicated files," +
                                   " another saber with the same name already exists or that the custom saber is simply just broken." +
                                   "\n\nThe best thing is probably just to delete it!";

                    FileName = "DefaultSabers";
                }
            }
            else
            {
                Descriptor = new SaberDescriptor
                {
                    SaberName   = "Default",
                    AuthorName  = "Beat Saber",
                    Description = "This is the default sabers. (No preview available)",
                    CoverImage  = Utils.GetRandomCoverImage(),
                };
            }
        }
Ejemplo n.º 3
0
        public CustomSaberData(string fileName)
        {
            FileName = fileName;

            if (fileName != "DefaultSabers")
            {
                try
                {
                    AssetBundle     = AssetBundle.LoadFromFile(Path.Combine(Plugin.PluginAssetPath, fileName));
                    Sabers          = AssetBundle.LoadAsset <GameObject>("_CustomSaber");
                    SaberDescriptor = Sabers.GetComponent <SaberDescriptor>();

                    if (SaberDescriptor.CoverImage == null)
                    {
                        SaberDescriptor.CoverImage = Utils.GetDefaultCoverImage();
                    }
                }
                catch
                {
                    Logger.log.Warn($"Something went wrong getting the AssetBundle for '{fileName}'!");

                    SaberDescriptor = new SaberDescriptor
                    {
                        SaberName  = "Invalid Saber (Delete it)",
                        AuthorName = FileName,
                        CoverImage = Utils.GetErrorCoverImage()
                    };

                    FileName = "DefaultSabers";
                }
            }
            else
            {
                SaberDescriptor = new SaberDescriptor
                {
                    SaberName  = "Default",
                    AuthorName = "Beat Saber",
                    CoverImage = Utils.GetRandomCoverImage(),
                };
            }
        }
Ejemplo n.º 4
0
        public CustomSaberData(Saber leftSaber, Saber rightSaber)
        {
            FileName = "DefaultSabers";

            SaberDescriptor = new SaberDescriptor
            {
                SaberName  = "Default",
                AuthorName = "Beat Games",
                CoverImage = Utils.GetRandomCoverImage(),
            };

            GameObject saberParent = new GameObject();

            if (saberParent)
            {
                leftSaber.transform.SetParent(saberParent.transform);
                rightSaber.transform.SetParent(saberParent.transform);
            }

            Sabers = saberParent;
        }
Ejemplo n.º 5
0
        IEnumerator LoadSabersRoutine()
        {
            string[] allBundlePaths = Directory.GetFiles(SettingsManager.Instance.Settings["Other"]["RootFolderPath"].StringValue + "CustomSabers", "*.saber");

            for (int i = 0; i < allBundlePaths.Length; i++)
            {
                string bundlePath = allBundlePaths[i];
                if (IsPathAlreadyLoaded(bundlePath))
                {
                    continue;
                }
                var bundleRequest = AssetBundle.LoadFromFileAsync(bundlePath);
                yield return(bundleRequest);

                var bundle = bundleRequest.assetBundle;
                if (bundle == null)
                {
                    continue;
                }

                var prefabRequest = bundle.LoadAssetAsync <GameObject>("_customsaber");
                yield return(prefabRequest);

                GameObject prefab = (GameObject)prefabRequest.asset;

                SaberDescriptor customSaber = prefab.GetComponent <SaberDescriptor>();

                var saberInfo = new CustomSaberInfo
                {
                    Path            = bundlePath,
                    SaberDescriptor = customSaber,
                };

                SetupSaber(prefab, saberInfo);

                bundle.Unload(false);

                yield return(null);
            }
        }
Ejemplo n.º 6
0
 // ReSharper disable once InconsistentNaming
 public void LoadSabers(bool FirstRun)
 {
     Console.WriteLine("Loading sabers!");
     if (FirstRun)
     {
         foreach (string sab in Plugin.RetrieveCustomSabers())
         {
             CustomSaber tempsab = new CustomSaber();
             if (sab == "DefaultSabers")
             {
                 tempsab.Name        = "Default Sabers";
                 tempsab.Author      = "Beat Games";
                 tempsab.Path        = "DefaultSabers";
                 tempsab.AssetBundle = null;
                 tempsab.GameObject  = null;
             }
             else
             {
                 try
                 {
                     AssetBundle     tempbundle    = AssetBundle.LoadFromFile(sab);
                     GameObject      sabroot       = tempbundle.LoadAsset <GameObject>("_customsaber");
                     SaberDescriptor tempdesciptor = sabroot.GetComponent <SaberDescriptor>();
                     if (tempdesciptor == null)
                     {
                         tempsab.Name        = sab.Split('/').Last().Split('.').First();
                         tempsab.Author      = "THIS SHOULD NEVER HAPPEN";
                         tempsab.Path        = sab;
                         tempsab.AssetBundle = null;
                         tempsab.GameObject  = null;
                     }
                     else
                     {
                         tempsab.Name        = tempdesciptor.SaberName;
                         tempsab.Author      = tempdesciptor.AuthorName;
                         tempsab.Path        = sab;
                         tempsab.AssetBundle = tempbundle;
                         tempsab.GameObject  = sabroot;
                     }
                 }
                 catch (Exception e)
                 {
                     Console.WriteLine(e);
                     tempsab.Name        = "This saber is broken, delete it.";
                     tempsab.Author      = sab.Split('/').Last();//.Split('.').First();
                     tempsab.Path        = sab;
                     tempsab.AssetBundle = null;
                     tempsab.GameObject  = null;
                 }
             }
             _sabers.Add(tempsab);
         }
     }
     else
     {
         foreach (CustomSaber tempsab in _sabers)
         {
             if (tempsab.Path != "DefaultSabers")
             {
                 var             tempbundle    = AssetBundle.LoadFromFile(tempsab.Path);
                 GameObject      sabroot       = tempbundle.LoadAsset <GameObject>("_customsaber");
                 SaberDescriptor tempdesciptor = sabroot.GetComponent <SaberDescriptor>();
                 if (tempdesciptor == null)
                 {
                     tempsab.AssetBundle = null;
                     tempsab.GameObject  = null;
                 }
                 else
                 {
                     tempsab.AssetBundle = tempbundle;
                     tempsab.GameObject  = sabroot;
                 }
             }
         }
     }
     Console.WriteLine("Added all sabers");
 }