Esempio n. 1
0
        /// <summary>
        /// 当歌曲播放完毕时是单曲播放时
        /// </summary>
        private static void OnSinglePlay()
        {
            ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas;

            scenesDatas.AudioSource.Stop();
            UILyricControl.ResetLyric(scenesDatas.LyricItems);
            scenesDatas.VideoPlayer.Stop();
            ModelManager.Instance.GetLogicDatas.Index = 0;
            SongControl.ReleaseAudioRelatedResources();
        }
Esempio n. 2
0
        /// <summary>
        /// 当歌曲播放完毕时是循环播放时
        /// </summary>
        private static void OnLoopPlayback()
        {
            LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas;

            logicDatas.CurrentSongIndex++;
            logicDatas.CurrentSongIndex %= logicDatas.SongsName.Length;
            logicDatas.Index             = 0;
            SongControl.ReleaseAudioRelatedResources();
            SongControl.LoadNextSong(logicDatas.SongsName[logicDatas.CurrentSongIndex]);
        }
Esempio n. 3
0
 /// <summary>
 /// 改变歌曲
 /// </summary>
 /// <param name="index">歌曲索引</param>
 internal static void ChangeSong(int index)
 {
     if (ModelManager.Instance.GetLogicDatas.GameState == GameState.Loading)
     {
         return;
     }
     SongControl.StopSong();
     SongControl.ReleaseAudioRelatedResources();
     string[] songName = ModelManager.Instance.GetLogicDatas.SongsName;
     if (index < 0 || index >= songName.Length)
     {
         return;
     }
     ModelManager.Instance.GetLogicDatas.CurrentSongIndex = index;
     SongControl.LoadNextSong(songName[index]);
 }
Esempio n. 4
0
        /// <summary>
        /// 播放下一首
        /// </summary>
        internal static void PlayNextSong()
        {
            LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas;

            if (logicDatas.GameState == GameState.StandBy)
            {
                SongControl.LoadNextSong(logicDatas.SongsName[0]);
            }
            else if (logicDatas.GameState == GameState.Playing || logicDatas.GameState == GameState.Pause)
            {
                logicDatas.CurrentSongIndex++;
                logicDatas.CurrentSongIndex %= logicDatas.SongsName.Length;
                logicDatas.Index             = 0;
                SongControl.StopSong();
                SongControl.ReleaseAudioRelatedResources();
                SongControl.LoadNextSong(logicDatas.SongsName[logicDatas.CurrentSongIndex]);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 刷新资源
        /// </summary>
        internal static void RefreshAssets()
        {
            LogicDatas  logicDatas  = ModelManager.Instance.GetLogicDatas;
            ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas;

            if (logicDatas.GameState != GameState.Loading)
            {
                return;
            }
            if (AssetsControl.IsLoadFinishAssets())
            {
                //此处应统一调用并更新UI
                AssetsControl.LoadFinish(out AudioClip audioClip, out string textContent);
                scenesDatas.AudioSource.clip = audioClip;
                logicDatas.LyricInfo         = ParseLyric.ParseLyricFunc(textContent);
                SongControl.PlayLoadFinishSong();
            }
        }
Esempio n. 6
0
        /// <summary>
        /// 播放或暂停
        /// </summary>
        internal static void PlayOrPauseSong()
        {
            LogicDatas  logicDatas  = ModelManager.Instance.GetLogicDatas;
            ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas;

            if (logicDatas.GameState == GameState.Pause)
            {
                logicDatas.GameState = GameState.Playing;
                SongControl.PlaySong();
            }
            else if (logicDatas.GameState == GameState.StandBy)
            {
                logicDatas.GameState = GameState.Playing;
                SongControl.ChangeSong(0);
            }
            else if (logicDatas.GameState == GameState.Playing)
            {
                logicDatas.GameState = GameState.Pause;
                SongControl.PauseSong();
            }
        }
Esempio n. 7
0
        /// <summary>
        /// 监听歌曲是否播放完毕
        /// </summary>
        internal static void ListeningSongOver()
        {
            ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas;

            if (scenesDatas.AudioSource.clip == null)
            {
                return;
            }

            if (SongTimeTools.IsSongOver(AudioSourceData.GetCurrentSongTime(scenesDatas.AudioSource), AudioSourceData.GetCurrentSongLength(scenesDatas.AudioSource)))
            {
                switch (ModelManager.Instance.GetLogicDatas.CycleType)
                {
                case CycleType.SingleCycle:
                    SongControl.OnSingleCycle();
                    break;

                case CycleType.PlayInOrder:
                    SongControl.OnPlayInOrder();
                    break;

                case CycleType.LoopPlayback:
                    SongControl.OnLoopPlayback();
                    break;

                case CycleType.RandomPlay:
                    SongControl.OnRandomPlay();
                    break;

                case CycleType.SinglePlay:
                    SongControl.OnSinglePlay();
                    break;

                default:
                    break;
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// 当歌曲播放完毕时是顺序播放时
        /// </summary>
        private static void OnPlayInOrder()
        {
            LogicDatas  logicDatas  = ModelManager.Instance.GetLogicDatas;
            ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas;

            logicDatas.CurrentSongIndex++;
            logicDatas.Index = 0;
            if (logicDatas.CurrentSongIndex >= logicDatas.SongsName.Length)
            {
                scenesDatas.AudioSource.Stop();
                UILyricControl.ResetLyric(scenesDatas.LyricItems);
                if (scenesDatas.VideoPlayer.isPlaying)
                {
                    scenesDatas.VideoPlayer.Stop();
                }
                logicDatas.CurrentSongIndex = logicDatas.SongsName.Length - 1;
            }
            else
            {
                SongControl.ReleaseAudioRelatedResources();
                SongControl.LoadNextSong(logicDatas.SongsName[logicDatas.CurrentSongIndex]);
            }
        }
Esempio n. 9
0
        /// <summary>
        /// 当歌曲播放完毕时是随机播放时
        /// </summary>
        private static void OnRandomPlay()
        {
            LogicDatas  logicDatas  = ModelManager.Instance.GetLogicDatas;
            ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas;
            int         index       = UnityEngine.Random.Range(0, logicDatas.SongsName.Length);

            logicDatas.Index = 0;
            if (index == logicDatas.CurrentSongIndex)
            {
                scenesDatas.AudioSource.Play();
                if (string.IsNullOrEmpty(scenesDatas.VideoPlayer.url) && scenesDatas.VideoPlayer.isPrepared)
                {
                    scenesDatas.VideoPlayer.Play();
                }
                UILyricControl.InitLyric(scenesDatas.LyricItems, logicDatas.LyricInfo);
            }
            else
            {
                logicDatas.CurrentSongIndex = index;
                SongControl.ReleaseAudioRelatedResources();
                SongControl.LoadNextSong(logicDatas.SongsName[logicDatas.CurrentSongIndex]);
            }
        }