public static void LoadAvatars() { if (defaultAvatarInstance == null) { defaultAvatarInstance = CustomAvatar.Plugin.Instance.AvatarLoader.Avatars.FirstOrDefault(x => x.FullPath.ToLower().Contains("template.avatar")); } Logger.Debug($"Found avatar, isLoaded={defaultAvatarInstance.IsLoaded}"); if (!defaultAvatarInstance.IsLoaded) { defaultAvatarInstance.Load(null); } foreach (CustomAvatar.CustomAvatar avatar in CustomAvatar.Plugin.Instance.AvatarLoader.Avatars) { Task.Run(() => { string hash; if (CreateMD5FromFile(avatar.FullPath, out hash)) { ModelSaberAPI.cachedAvatars.Add(hash, avatar); Logger.Debug("Hashed avatar " + avatar.Name + "! Hash: " + hash); } }).ConfigureAwait(false); } }
public void SongFinished(StandardLevelSceneSetupDataSO sender, LevelCompletionResults levelCompletionResults, IDifficultyBeatmap difficultyBeatmap, GameplayModifiers gameplayModifiers) { try { if (sender == null || levelCompletionResults == null || difficultyBeatmap == null || gameplayModifiers == null) { return; } Logger.Debug("Finished song: " + levelCompletionResults.levelEndStateType + " - " + levelCompletionResults.songDuration + " - - " + levelCompletionResults.endSongTime); PlayerDataModelSO _playerDataModel = Resources.FindObjectsOfTypeAll <PlayerDataModelSO>().First(); _playerDataModel.currentLocalPlayer.playerAllOverallStatsData.soloFreePlayOverallStatsData.UpdateWithLevelCompletionResults(levelCompletionResults); _playerDataModel.Save(); if (levelCompletionResults.levelEndStateType != LevelCompletionResults.LevelEndStateType.Failed && levelCompletionResults.levelEndStateType != LevelCompletionResults.LevelEndStateType.Cleared) { return; } PlayerDataModelSO.LocalPlayer currentLocalPlayer = _playerDataModel.currentLocalPlayer; bool cleared = levelCompletionResults.levelEndStateType == LevelCompletionResults.LevelEndStateType.Cleared; string levelID = difficultyBeatmap.level.levelID; BeatmapDifficulty difficulty = difficultyBeatmap.difficulty; PlayerLevelStatsData playerLevelStatsData = currentLocalPlayer.GetPlayerLevelStatsData(levelID, difficulty); bool newHighScore = playerLevelStatsData.highScore < levelCompletionResults.score; playerLevelStatsData.IncreaseNumberOfGameplays(); if (cleared) { playerLevelStatsData.UpdateScoreData(levelCompletionResults.score, levelCompletionResults.maxCombo, levelCompletionResults.fullCombo, levelCompletionResults.rank); Resources.FindObjectsOfTypeAll <PlatformLeaderboardsModel>().First().AddScore(difficultyBeatmap, levelCompletionResults.unmodifiedScore, gameplayModifiers); } } catch (Exception e) { Data.Logger.Error(e); } }
IEnumerator InitializeAvatarController() { if (!defaultAvatarInstance.IsLoaded) { Logger.Debug("Waiting for avatar to load"); yield return(new WaitWhile(delegate() { return !defaultAvatarInstance.IsLoaded; })); } else { yield return(null); } Logger.Debug("Spawning avatar"); _centerAdjust = FindObjectOfType <VRCenterAdjust>(); avatar = AvatarSpawner.SpawnAvatar(defaultAvatarInstance, this); playerNameText = CreateWorldText(transform, "Loading"); playerNameText.rectTransform.anchoredPosition3D = new Vector3(0f, 0.25f, 0f); playerNameText.alignment = TextAlignmentOptions.Center; playerNameText.fontSize = 2.5f; avatar.GameObject.transform.SetParent(_centerAdjust.transform, false); transform.SetParent(_centerAdjust.transform, false); }
IEnumerator RunLobbyCleanup() { yield return(new WaitUntil(delegate() { Data.Logger.Info("waiting for active: " + WaitingMenu.Instance.isActiveAndEnabled); return WaitingMenu.Instance.isActiveAndEnabled; })); Logger.Debug("Finished song, doing cleanup"); WaitingMenu.Instance.Dismiss(); WaitingMenu.firstInit = true; WaitingMenu.queuedSong = null; SongListUtils.InSong = false; SteamAPI.FinishSong(); }
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); } }
protected void didSelectLevel(LevelListViewController controller, IBeatmapLevel level) { Logger.Debug($"level {level.levelID} selected"); if (!_partyFlowCoordinator || !_partyFlowCoordinator.isActivated) { toggleButtons(true); return; } toggleButtons(false); SteamAPI.SetSong(level.levelID, level.songName); }
private void didSelectBeatmap(BeatmapDifficultyViewController controller, IDifficultyBeatmap beatmap) { Logger.Debug($"beatmap {beatmap.difficulty} selected"); if (!_partyFlowCoordinator || !_partyFlowCoordinator.isActivated) { toggleButtons(true); return; } toggleButtons(false); SteamAPI.SetDifficulty((byte)beatmap.difficulty); }
public void ActiveSceneChanged(Scene from, Scene to) { try { if (!SteamAPI.isLobbyConnected()) { return; } if (to.name == "GameCore" || to.name == "MenuCore") { try { PlayerController.Instance.DestroyAvatars(); if (to.name == "GameCore" && SongListUtils.InSong) { Logger.Debug("update scoreboard"); SteamAPI.StartGame(); InvokeRepeating("UpdateSongOffset", 0f, 1f); Scoreboard.Instance.disabled = false; List <PlayerPacket> connectedPlayers = Controllers.PlayerController.Instance.GetConnectedPlayerPackets(); for (int i = 0; i < connectedPlayers.Count; i++) { Scoreboard.Instance.UpsertScoreboardEntry(connectedPlayers[i].playerId, connectedPlayers[i].playerName, 0, 0); } } else if (to.name == "MenuCore") { Scoreboard.Instance.RemoveAll(); Scoreboard.Instance.disabled = true; if (from.name == "GameCore" && SongListUtils.InSong) { StartCoroutine(RunLobbyCleanup()); } } } catch (Exception e) { Logger.Debug($"Exception: {e}"); Logger.Error(e); } } } catch (Exception e) { Logger.Error($"(OnlineController) Exception on {_currentScene} scene activation! Exception: {e}"); } }
private static void refreshFriendsList(ListViewController leftViewController) { friends = SteamAPI.GetOnlineFriends(); leftViewController.Data.Clear(); CGameID gameId = SteamAPI.GetGameID(); foreach (KeyValuePair <CSteamID, string[]> entry in friends) { if ("" + gameId != entry.Value[1] || entry.Value[1] == "0") { continue; } Logger.Debug($"{entry.Value[0]} playing Beat Saber"); leftViewController.Data.Add(new CustomCellInfo(entry.Value[0], "Playing Beat Saber")); } foreach (KeyValuePair <CSteamID, string[]> entry in friends) { if ("" + gameId == entry.Value[1] || entry.Value[1] == "0") { continue; } Logger.Debug($"{entry.Value[0]} playing Other Game"); leftViewController.Data.Add(new CustomCellInfo(entry.Value[0], "Playing Other Game")); } foreach (KeyValuePair <CSteamID, string[]> entry in friends) { if ("0" != entry.Value[1]) { continue; } Logger.Debug($"{entry.Value[0]} online"); leftViewController.Data.Add(new CustomCellInfo(entry.Value[0], "Online")); } leftViewController._customListTableView.ReloadData(); leftViewController._customListTableView.ScrollToCellWithIdx(0, TableView.ScrollPositionType.Beginning, false); leftViewController.DidSelectRowEvent = (view, row) => { invite.interactable = false; CustomCellInfo cell = leftViewController.Data[row]; KeyValuePair <CSteamID, string[]> friend = friends.Where(entry => entry.Value[0] == cell.text).First(); selectedPlayer = friend.Key.m_SteamID; invite.interactable = true; }; }
private void didSelectPlay() { try { var practice = ReflectionUtil.GetPrivateField <Button>(detail, "_practiceButton"); Logger.Debug("Custom play button selected"); if (!_partyFlowCoordinator || !_partyFlowCoordinator.isActivated) { toggleButtons(true); return; } toggleButtons(false); SteamAPI.RequestPlay(new GameplayModifiers(_gameplaySetupViewController.gameplayModifiers)); } catch (Exception e) { Logger.Error(e); } }
protected void CreateUI() { try { _mainMenuViewController = Resources.FindObjectsOfTypeAll <MainMenuViewController>().First(); _mainMenuViewController.didFinishEvent += (sender, result) => { Logger.Debug($"finish \"{result}\""); if (result == MainMenuViewController.MenuButton.Party) { try { _mockPartyViewController = new MockPartyViewController(); } catch (Exception e) { Logger.Error(e); } } }; _mainMenuRectTransform = _mainMenuViewController.transform as RectTransform; if (Config.Instance.AutoStartLobby) { SteamAPI.CreateLobby(!Config.Instance.IsPublic); } try { AvatarController.LoadAvatars(); } catch (Exception e) { Logger.Error($"Unable to load avatars! Exception: {e}"); } SongListUtils.Initialize(); MultiplayerListing.Init(); MultiplayerLobby.Init(); WaitingMenu.Init(); CreateSettingsMenu(); CreateMainMenuButton(); } catch (Exception e) { Logger.Error($"Unable to create UI! Exception: {e}"); } }
public void Awake() { if (instance != this) { instance = this; instance.StartCoroutine(Utils.AutoUpdater.GetLatestVersionDownload()); DontDestroyOnLoad(this); SteamAPI.Init(); Logger.Debug("CreateUI"); try { CreateUI(); } catch (Exception e) { Logger.Error($"Unable to create UI! Exception: {e}"); } } }
public bool AllPlayersInMenu() { bool InMenu = !_playerInfo.InSong; if (!InMenu) { Logger.Debug("You are in a song"); } for (int i = 0; i < _connectedPlayers.Count; i++) { if (InMenu && _connectedPlayers.Values.ToArray()[i].InSong) { Logger.Debug(_connectedPlayers.Values.ToArray()[i].playerName + " is in song"); InMenu = false; break; } } return(InMenu); }
IEnumerator RunLobbyCleanup() { yield return(new WaitUntil(delegate() { return true; })); Logger.Debug("Finished song, doing cleanup"); try { WaitingMenu.Instance.Dismiss(); } catch (Exception e) { Logger.Error($"Error dismissing WaitingMenu {e}"); } WaitingMenu.firstInit = true; WaitingMenu.queuedSong = null; WaitingMenu.autoReady = false; SongListUtils.InSong = false; Controllers.PlayerController.Instance._playerInfo.InSong = false; SteamAPI.SetSongOffset(0f); CancelInvoke("UpdateSongOffset"); SteamAPI.FinishSong(); }