Procházet zdrojové kódy

Only redirect music if it exists

Bepis před 7 roky
rodič
revize
5be1da2fec
1 změnil soubory, kde provedl 31 přidání a 23 odebrání
  1. 31 23
      Plugins/ResourceRedirector/ResourceRedirector.cs

+ 31 - 23
Plugins/ResourceRedirector/ResourceRedirector.cs

@@ -3,6 +3,7 @@ using Harmony;
 using Illusion.Game;
 using System;
 using System.Collections;
+using System.IO;
 using System.Reflection;
 using UnityEngine;
 using UnityEngine.SceneManagement;
@@ -56,20 +57,10 @@ namespace ResourceRedirector
         public static FieldInfo f_typeObjects = typeof(Manager.Sound).GetField("typeObjects", BindingFlags.Instance | BindingFlags.NonPublic);
         public static FieldInfo f_settingObjects = typeof(Manager.Sound).GetField("settingObjects", BindingFlags.Instance | BindingFlags.NonPublic);
         public static PropertyInfo f_clip = typeof(LoadAudioBase).GetProperty("clip", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
-        
+
 
         public static void BindPreHook(ref LoadSound script)
         {
-            if (script.audioSource == null)
-            {
-                int type = (int)script.type;
-
-                Transform[] typeObjects = (Transform[])f_typeObjects.GetValue(Manager.Game.Instance);
-                GameObject[] settingObjects = (GameObject[])f_settingObjects.GetValue(Manager.Game.Instance);
-
-                Manager.Sound.Instance.SetParent(typeObjects[type], script, settingObjects[type]);
-            }
-
             if (script.clip.name.StartsWith("bgm"))
             {
                 string path;
@@ -78,29 +69,46 @@ namespace ResourceRedirector
                 {
                     case BGM.Title:
                     default:
-                        path = "file://" + BepInEx.Common.Utility.PluginsDirectory.Replace('\\', '/') + "/title.wav";
+                        path = $"{BepInEx.Common.Utility.PluginsDirectory}\\title.wav";
                         break;
                     case BGM.Custom:
-                        path = "file://" + BepInEx.Common.Utility.PluginsDirectory.Replace('\\', '/') + "/custom.wav";
+                        path = $"{BepInEx.Common.Utility.PluginsDirectory}\\custom.wav";
                         break;
                 }
 
+                if (!File.Exists(path))
+                    return;
                 
-                Console.WriteLine($"Loaded {path}");
-                WWW loadGachi = new WWW(path);
 
-                
-                AudioClip clip = loadGachi.GetAudioClip(false);
+                Console.WriteLine($"Loading {path}");
 
-                //force single threaded loading instead of using a coroutine
-                while (!clip.isReadyToPlay) { }
+                path = $"file://{path.Replace('\\', '/')}";
 
 
-                script.audioSource.clip = clip;
+                if (script.audioSource == null)
+                {
+                    int type = (int)script.type;
 
-                f_clip.SetValue(script, clip, null);
-                
-                loadGachi.Dispose();
+                    Transform[] typeObjects = (Transform[])f_typeObjects.GetValue(Manager.Game.Instance);
+                    GameObject[] settingObjects = (GameObject[])f_settingObjects.GetValue(Manager.Game.Instance);
+
+                    Manager.Sound.Instance.SetParent(typeObjects[type], script, settingObjects[type]);
+                }
+
+
+                using (WWW loadGachi = new WWW(path))
+                {
+                    AudioClip clip = loadGachi.GetAudioClipCompressed(false, AudioType.WAV);
+
+
+                    //force single threaded loading instead of using a coroutine
+                    while (!clip.isReadyToPlay) { }
+
+
+                    script.audioSource.clip = clip;
+
+                    f_clip.SetValue(script, clip, null);
+                }
             }
         }
     }