public void OverwriteClips(KMSoundOverride clipsOverride) { List <AudioClip> clips; if (!_soundEffects.TryGetValue(clipsOverride.OverrideEffect, out clips)) { clips = new List <AudioClip>(); _soundEffects.Add(clipsOverride.OverrideEffect, clips); } else { clips.Clear(); } clips.Add(clipsOverride.AudioClip); clips.AddRange(clipsOverride.AdditionalVariants); clips.RemoveAll(t => t == null); }
void Start() { if (realMod != null) { return; } ModConfig <List <string> > Soundpacks = new ModConfig <List <string> >("EnabledSoundpacks"); List <string> enabledSoundpacks = Soundpacks.Settings; if (!Directory.Exists(SoundsDirectory)) { Log("Created the Soundpacks directory, not loading any soundpacks."); Directory.CreateDirectory(SoundsDirectory); return; } Type ModManager = FindType("ModManager"); FieldInfo ModManagerInstanceField = ModManager.GetField("Instance", BindingFlags.Public | BindingFlags.Static); FieldInfo ModManagerLoadedModsDictField = ModManager.GetField("loadedMods", BindingFlags.NonPublic | BindingFlags.Instance); object ModManagerInstance = ModManagerInstanceField.GetValue(null); IDictionary LoadedMods = (IDictionary)ModManagerLoadedModsDictField.GetValue(ModManagerInstance); realMod = null; foreach (DictionaryEntry kvp in LoadedMods) { string key = (string)kvp.Key; var id = (string)kvp.Value.GetType().GetProperty("ModID", BindingFlags.Public | BindingFlags.Instance).GetValue(kvp.Value, null); if (id.Equals("SoundpackMaker")) { realMod = kvp.Value; break; } } if (realMod == null) { return; } MethodInfo HandleSoundOverride = realMod.GetType().GetMethod("HandleSoundOverride", BindingFlags.NonPublic | BindingFlags.Instance); Dictionary <KMSoundOverride.SoundEffect, KMSoundOverride> soundOverrides = new Dictionary <KMSoundOverride.SoundEffect, KMSoundOverride>(); // Add the new sound effects. foreach (string soundpackName in enabledSoundpacks) { string soundpackDirectory = Path.Combine(SoundsDirectory, soundpackName); if (Directory.Exists(soundpackDirectory)) { Log("Adding soundpack: {0}", soundpackName); foreach (KMSoundOverride soundOverride in LoadSoundpack(soundpackDirectory)) { // if (soundOverrides.ContainsKey(soundOverride.OverrideEffect)) { KMSoundOverride sOverride = soundOverrides[soundOverride.OverrideEffect]; List <AudioClip> clips = new List <AudioClip>(); clips.Add(soundOverride.AudioClip); if (soundOverride.AdditionalVariants != null) { clips.AddRange(soundOverride.AdditionalVariants); } if (sOverride.AdditionalVariants != null) { clips.AddRange(sOverride.AdditionalVariants); } sOverride.AdditionalVariants = clips.ToArray(); soundOverride.AdditionalVariants = null; soundOverride.AudioClip = null; Destroy(soundOverride); } else { soundOverrides[soundOverride.OverrideEffect] = soundOverride; } } } else { Log("There is no soundpack called \"{0}\"", soundpackName); } } foreach (KMSoundOverride soundOverride in soundOverrides.Values) { HandleSoundOverride.Invoke(realMod, new object[] { soundOverride }); } }