예제 #1
0
        public void UpdateUI(ChannelState state)
        {
            switch (state)
            {
            case ChannelState.NextSong:
            {
                if (!_radioNavController.viewControllers.Contains(_nextSongScreenViewController))
                {
                    PopAllViewControllers();
                }

                ShowNextSongScreen();

                IPreviewBeatmapLevel level = SongCore.Loader.CustomBeatmapLevelPackCollectionSO.beatmapLevelPacks.SelectMany(x => x.beatmapLevelCollection.beatmapLevels).FirstOrDefault(x => x.levelID.StartsWith(channelInfo.currentSong.levelId));

                if (level == null)
                {
                    Client.Instance.playerInfo.updateInfo.playerState = PlayerState.DownloadingSongs;
                    SongDownloader.Instance.RequestSongByLevelID(channelInfo.currentSong.hash,
                                                                 (song) =>
                        {
                            SongDownloader.Instance.DownloadSong(song,
                                                                 (success) =>
                            {
                                if (success)
                                {
                                    void onLoaded(SongCore.Loader sender, Dictionary <string, CustomPreviewBeatmapLevel> songs)
                                    {
                                        SongCore.Loader.SongsLoadedEvent -= onLoaded;
                                        Client.Instance.playerInfo.updateInfo.playerState = PlayerState.Room;
                                        channelInfo.currentSong.UpdateLevelId();
                                        level = songs.FirstOrDefault(x => x.Value.levelID == channelInfo.currentSong.levelId).Value;
                                        if (level != null)
                                        {
                                            LoadBeatmapLevelAsync(level,
                                                                  (loaded, beatmapLevel) =>
                                            {
                                                PreviewPlayer.CrossfadeTo(beatmapLevel.beatmapLevelData.audioClip, beatmapLevel.previewStartTime, Math.Max(totalTime - currentTime, beatmapLevel.previewDuration));
                                            });
                                        }
                                    }

                                    SongCore.Loader.SongsLoadedEvent += onLoaded;
                                    SongCore.Loader.Instance.RefreshSongs(false);
                                }
                            },
                                                                 (progress) =>
                            {
                                _nextSongScreenViewController.SetProgressBarState((progress < 100f), progress);
                            });
                        });
                }

                Client.Instance.playerInfo.updateInfo.playerScore       = 0;
                Client.Instance.playerInfo.updateInfo.playerEnergy      = 0f;
                Client.Instance.playerInfo.updateInfo.playerCutBlocks   = 0;
                Client.Instance.playerInfo.updateInfo.playerComboBlocks = 0;
            }
            break;

            case ChannelState.InGame:
            {
                if (!_radioNavController.viewControllers.Contains(_inGameViewController))
                {
                    PopAllViewControllers();
                }

                ShowInGameScreen();
            }
            break;

            case ChannelState.Results:
            {
                if (!_radioNavController.viewControllers.Contains(_resultsScreenViewController))
                {
                    PopAllViewControllers();
                }

                ShowResultsScreen();
            }
            break;
            }
        }
예제 #2
0
        public void UpdateUI(ChannelState state)
        {
            switch (state)
            {
            case ChannelState.NextSong:
            {
                if (!_radioNavController.viewControllers.Contains(_nextSongScreenViewController))
                {
                    PopAllViewControllers();
                }

                ShowNextSongScreen();

                BeatmapLevelSO level = SongLoader.CustomBeatmapLevelPackCollectionSO.beatmapLevelPacks.SelectMany(x => x.beatmapLevelCollection.beatmapLevels).FirstOrDefault(x => x.levelID.StartsWith(channelInfo.currentSong.levelId)) as BeatmapLevelSO;

                if (level == null)
                {
                    Client.Instance.playerInfo.playerState = PlayerState.DownloadingSongs;
                    SongDownloader.Instance.RequestSongByLevelID(channelInfo.currentSong.levelId,
                                                                 (song) =>
                        {
                            SongDownloader.Instance.DownloadSong(song, "RadioSongs",
                                                                 () =>
                            {
                                Action <SongLoader, List <CustomLevel> > onLoaded = null;
                                onLoaded = (sender, songs) =>
                                {
                                    SongLoader.SongsLoadedEvent           -= onLoaded;
                                    Client.Instance.playerInfo.playerState = PlayerState.Room;
                                    level = songs.FirstOrDefault(x => x.levelID.StartsWith(channelInfo.currentSong.levelId));
                                    if (level != null)
                                    {
                                        SongLoader.Instance.LoadAudioClipForLevel((CustomLevel)level,
                                                                                  (levelLoaded) =>
                                        {
                                            PreviewPlayer.CrossfadeTo(levelLoaded.beatmapLevelData.audioClip, levelLoaded.previewStartTime, Math.Max(totalTime - currentTime, levelLoaded.previewDuration));
                                        });
                                    }
                                };

                                SongLoader.SongsLoadedEvent += onLoaded;
                            },
                                                                 (progress) =>
                            {
                                _nextSongScreenViewController.SetProgressBarState((progress < 100f), progress);
                            });
                        });
                }

                Client.Instance.playerInfo.playerScore       = 0;
                Client.Instance.playerInfo.playerEnergy      = 0f;
                Client.Instance.playerInfo.playerCutBlocks   = 0;
                Client.Instance.playerInfo.playerComboBlocks = 0;
            }
            break;

            case ChannelState.InGame:
            {
                if (!_radioNavController.viewControllers.Contains(_inGameViewController))
                {
                    PopAllViewControllers();
                }

                ShowInGameScreen();
            }
            break;

            case ChannelState.Results:
            {
                if (!_radioNavController.viewControllers.Contains(_resultsScreenViewController))
                {
                    PopAllViewControllers();
                }

                ShowResultsScreen();
            }
            break;
            }
        }