Exemplo n.º 1
0
        public static bool PlayTrack(string trackName, float fadeTimeMs = 2000f, bool force = false)
        {
            if (G.Sys.AudioManager_.CurrentMusicState_ == AudioManager.MusicState.CustomMusic)
            {
                return(false);
            }
            if (!Enabled)
            {
                StopCustomMusic();
                return(false);
            }
            if (trackName == null)
            {
                StopCustomMusic();
                return(false);
            }
            var track = GetTrack(trackName);

            if (track == null || string.IsNullOrEmpty(track.FileLocation))
            {
                StopCustomMusic();
                return(false);
            }
            if (!force && PlayingMusic && AudioManager.CurrentAudioFile_ != null && AudioManager.CurrentAudioFile_.FileName == track.FileLocation)
            {
                return(true);
            }
            typeof(AudioManager).GetField("perLevelMusicOverride_", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(G.Sys.AudioManager_, false);
            var failed = false;

            Events.StaticEvent <Events.Audio.MusicSegmentEnd.Data> .Delegate func = data => { failed = true; };
            Events.StaticEvent <Events.Audio.MusicSegmentEnd.Data> .Subscribe(func);

            try
            {
                G.Sys.AudioManager_.PlayMP3(track.FileLocation, PlayingMusic ? 0f : fadeTimeMs);
            }
            catch (Exception e)
            {
                Events.StaticEvent <Events.Audio.MusicSegmentEnd.Data> .Unsubscribe(func);

                UnityEngine.Debug.Log($"Failed to play track {trackName} because: {e}");
                StopCustomMusic();
                return(false);
            }
            Events.StaticEvent <Events.Audio.MusicSegmentEnd.Data> .Unsubscribe(func);

            if (failed || AudioManager.CurrentAudioFile_ == null || AudioManager.CurrentAudioFile_.FileName != track.FileLocation)
            {
                UnityEngine.Debug.Log($"Failed to play track {trackName}");
                StopCustomMusic();
                return(false);
            }
            typeof(AudioManager).GetField("perLevelMusicOverride_", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(G.Sys.AudioManager_, true);
            typeof(AudioManager).GetField("currentMusicState_", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(G.Sys.AudioManager_, AudioManager.MusicState.PerLevel);
            CurrentTrackName = trackName;
            PlayingMusic     = true;
            AudioManager.PostEvent("Mute_All_Music");
            return(true);
        }
Exemplo n.º 2
0
        public static void PatchPostLoad(bool subscribe)
        {
            var manager = G.Sys.AudioManager_;

            EditorPatches.removeParticularSubscriber <Events.Level.PostLoad.Data>(manager);
            var list = (Events.SubscriberList) typeof(AudioManager).GetField("subscriberList_", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(manager);
            var item = new Events.StaticEvent <Events.Level.PostLoad.Data> .Subscriber(new Events.StaticEvent <Events.Level.PostLoad.Data> .Delegate(data =>
            {
                UnityEngine.Debug.Log("Running PostLoad");
                typeof(AudioManager).GetMethod("OnEventPostLoad", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(G.Sys.AudioManager_, new object[] { data });
            }));

            list.Add(item);
            if (subscribe)
            {
                (item as Events.IEventSubscriber).Subscribe();
            }
        }