public static void RefreshData(LevelSO song = null) { try { if (queuedSong == null) { if (song == null) { song = SongListUtils.GetInstalledSong(); } Logger.Debug($"Refresh Waiting Menu data - Song is {(song != null ? "not" : "")} loaded"); if (song != null) { level.text = $"Queued: { song.songName} by { song.songAuthorName }"; if (song is CustomLevel) { SongLoader.Instance.LoadAudioClipForLevel((CustomLevel)song, (customLevel) => { Logger.Debug($"Loaded audio Clip for {song.songName}"); ReadyUp(customLevel); }); } else { ReadyUp(song); } } else if (!downloading) { level.text = $"Downloading: { SteamAPI.GetSongName()}"; Logger.Debug($"We do not have the song in our library, lets start downloading it."); downloading = true; Instance.StartCoroutine(Utils.SongDownloader.Instance.DownloadSong(SteamAPI.GetSongId(), LevelDownloadProgress, LevelDownloaded)); } } if (Instance && Instance.isActiveAndEnabled) { Dictionary <string, float> status = Controllers.PlayerController.Instance.GetConnectedPlayerDownloadStatus(); middleViewController.Data.Clear(); foreach (KeyValuePair <string, float> user in status.OrderBy(u => u.Value)) { CustomCellInfo cell = new CustomCellInfo(user.Key, user.Value == -1f ? "FAILED TO DOWNLOAD": user.Value == 1f ? "Ready" : $"Downloading song ${(int) Math.Round(user.Value * 100, 0)}%", user.Value == 1f ? Sprites.checkmarkIcon : Sprites.crossIcon); middleViewController.Data.Add(cell); } middleViewController._customListTableView.ReloadData(); middleViewController._customListTableView.ScrollToRow(0, false); } } catch (Exception e) { Logger.Error(e); } }
public static void LevelDownloaded(string hash) { try { downloading = false; IBeatmapLevel song = SongListUtils.GetInstalledSong(hash.ToUpper()); RefreshData(song); } catch (Exception e) { Logger.Error(e); } }
public static void RequestPlay(GameplayModifiers gameplayModifiers) { if (IsHost()) { try { Logger.Debug($"update the current screen to the waiting screen while people download the song"); LevelSO song = SongListUtils.GetInstalledSong(); if (song != null) { setLobbyStatus("Loading " + song.songName + " by " + song.songAuthorName); } _lobbyInfo.GameplayModifiers = gameplayModifiers; _lobbyInfo.Screen = LobbyInfo.SCREEN_TYPE.WAITING; SendLobbyInfo(true); } catch (Exception e) { Logger.Error(e); } } }
public void OnLobbyDataUpdate(LobbyDataUpdate_t pCallback) { if (pCallback.m_ulSteamIDLobby == pCallback.m_ulSteamIDMember) { LobbyInfo info = new LobbyInfo(SteamMatchmaking.GetLobbyData(new CSteamID(pCallback.m_ulSteamIDLobby), "LOBBY_INFO")); if (pCallback.m_ulSteamIDLobby == 0) { return; } Logger.Debug($"Received: {info.ToString()}"); if (pCallback.m_ulSteamIDLobby == SteamAPI.getLobbyID().m_SteamID) { SteamAPI.UpdateLobbyInfo(info); if (DidScreenChange(info.Screen, LobbyInfo.SCREEN_TYPE.WAITING)) { currentScreen = info.Screen; Logger.Debug($"Song has been selected, going to the waiting screen"); WaitingMenu.Instance.Present(); } else if (DidScreenChange(info.Screen, LobbyInfo.SCREEN_TYPE.MENU)) { currentScreen = info.Screen; Logger.Debug($"Song has finished, updating state to menu"); GameController.Instance.SongFinished(null, null, null, null); } else if (DidScreenChange(info.Screen, LobbyInfo.SCREEN_TYPE.PLAY_SONG)) { currentScreen = info.Screen; Logger.Debug($"Host requested to play the current song {info.CurrentSongId}"); LevelSO song = SongListUtils.GetInstalledSong(); if (SteamAPI.IsHost()) { SteamAPI.setLobbyStatus("Playing " + song.songName + " by " + song.songAuthorName); } SteamAPI.ClearPlayerReady(new CSteamID(SteamAPI.GetUserID()), true); SongListUtils.StartSong(song, SteamAPI.GetSongDifficulty(), info.GameplayModifiers); } } else { SteamAPI.SetOtherLobbyData(pCallback.m_ulSteamIDLobby, info); } } else { string status = SteamMatchmaking.GetLobbyMemberData(new CSteamID(pCallback.m_ulSteamIDLobby), new CSteamID(pCallback.m_ulSteamIDMember), "STATUS"); if (status == "DISCONNECTED") { SteamAPI.DisconnectPlayer(pCallback.m_ulSteamIDMember); } else if (status.StartsWith("KICKED")) { ulong playerId = Convert.ToUInt64(status.Substring(7)); if (playerId != 0 && playerId == SteamAPI.GetUserID()) { SteamAPI.Disconnect(); } } } }