/// <summary> /// Loads sounds from the specified directory. Accepts absolute path, path relative to /// GameData, and then path relative to DLL in that order /// </summary> /// <param name="dir"></param> /// <param name="b2D"></param> /// <returns></returns> public int LoadSoundsFrom(string dir, bool b2D = true) { int counter = 0; if (Path.IsPathRooted(dir) && Directory.Exists(dir)) { Log.Verbose("AudioPlayer: '{0}' seems to be a full path", dir); dir = Path.GetFullPath(dir).Replace('\\', '/'); Log.Debug("AudioPlayer.LoadSoundsFrom: Path after transformation and replace: {0}", dir); dir = ConfigUtil.GetRelativeToGameData(dir); } else { dir = dir.TrimStart('\\', '/'); // not a whole dir, so it could be relative to GameData such as: // [ksproot]/GameData/ dir = ScienceAlert/sounds // // or it could be relative to the DLL, such as: // sounds if (!Directory.Exists(Path.Combine(Path.GetFullPath(KSPUtil.ApplicationRootPath + "GameData"), dir))) // not relative to GameData { Log.Verbose("AudioPlayer: '{0}' seems to be a plugin-relative path", dir); // try relative to dll dir string relDll = Path.Combine(ConfigUtil.GetDllDirectoryPath(), dir); Log.Debug("trying relative path: " + relDll); if (Directory.Exists(relDll)) { dir = ConfigUtil.GetRelativeToGameData(relDll).Replace('\\', '/'); } else { Log.Error("AudioPlayer: Couldn't find '{0}'", dir); return(0); } } else { dir = dir.Replace('\\', '/'); Log.Verbose("AudioPlayer: '{0}' seems to be a GameData-relative path", dir); Log.Debug("checked: " + Path.Combine(Path.GetFullPath(KSPUtil.ApplicationRootPath), dir)); } } /* * [LOG 17:56:12.954] ScienceAlert, name: ScienceAlert/sounds/bubbles * [LOG 17:56:12.955] ScienceAlert, name: ScienceAlert/sounds/click1 * [LOG 17:56:12.956] ScienceAlert, name: ScienceAlert/sounds/click2 * [LOG 17:56:12.956] ScienceAlert, name: ScienceAlert/sounds/error*/ GameDatabase.Instance.databaseAudio.ForEach(ac => { // strip off the filename and just use the path (if any) of the clip's gamedata-relative url string urlDir = ac.name; int idx = urlDir.LastIndexOf('/'); if (idx >= 0) { urlDir = urlDir.Substring(0, idx); } //if (ac.name.Contains(dir)) if (string.Equals(urlDir, dir)) { if (sounds.ContainsKey(ac.name)) { Log.Warning("AudioPlayer: Already have key '{0}'", ac.name); return; } else { sounds.Add(ac.name, new PlayableSound(ac)); Log.Normal("{0} ready", ac.name); ++counter; } } }); if (counter == 0) { Log.Warning("AudioPlayer: Didn't load any sounds from directory '{0}'", dir); } return(counter); }