예제 #1
0
        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);
        }
예제 #2
0
    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 });
        }
    }