private async void LoadSong(string levelId, Action <IBeatmapLevel> loadedCallback) { IPreviewBeatmapLevel level = Plugin.masterLevelList.Where(x => x.levelID == levelId).First(); //Load IBeatmapLevel if (level is PreviewBeatmapLevelSO || level is CustomPreviewBeatmapLevel) { if (level is PreviewBeatmapLevelSO) { if (!await SaberUtilities.HasDLCLevel(level.levelID)) { return; //In the case of unowned DLC, just bail out and do nothing } } var map = ((CustomPreviewBeatmapLevel)level).standardLevelInfoSaveData.difficultyBeatmapSets.First().difficultyBeatmaps.First(); var result = await SaberUtilities.GetLevelFromPreview(level); if (result != null && !(result?.isError == true)) { loadedCallback(result?.beatmapLevel); } } else if (level is BeatmapLevelSO) { loadedCallback(level as IBeatmapLevel); } }
private void playButton_Click(object sender, EventArgs e) { if (songListView.SelectedItems.Count > 0 && difficultyDropdown.SelectedIndex >= 0) { var playerSettings = new PlayerSpecificSettings(); playerSettings.leftHanded = mirrorCheckbox.Checked; playerSettings.staticLights = staticLightsCheckbox.Checked; playerSettings.noTextsAndHuds = noHudCheckbox.Checked; playerSettings.advancedHud = advancedHudCheckbox.Checked; playerSettings.reduceDebris = reduceDebrisCheckbox.Checked; var modifiers = new GameplayModifiers(); modifiers.noFail = noFailCheckbox.Checked; modifiers.noBombs = noBombsCheckbox.Checked; modifiers.noObstacles = noWallsCheckbox.Checked; modifiers.instaFail = instaFailCheckbox.Checked && !modifiers.noFail; modifiers.failOnSaberClash = failOnClashCheckbox.Checked; modifiers.batteryEnergy = batteryEnergyCheckbox.Checked && !modifiers.noFail && !modifiers.instaFail; modifiers.fastNotes = fastNotesCheckbox.Checked; modifiers.songSpeed = fastSongCheckbox.Checked ? GameplayModifiers.SongSpeed.Faster : slowSongCheckbox.Checked ? GameplayModifiers.SongSpeed.Slower : GameplayModifiers.SongSpeed.Normal; modifiers.disappearingArrows = disappearingArrowsCheckbox.Checked && !ghostNotesCheckbox.Checked; modifiers.ghostNotes = ghostNotesCheckbox.Checked; var characteristic = currentSelection.beatmapCharacteristics.First(x => x.serializedName == characteristicDropdown.SelectedItem as string); SaberUtilities.PlaySong(currentSelection, characteristic, (BeatmapDifficulty)difficultyDropdown.SelectedItem, modifiers, playerSettings); } }
private void Client_PacketRecieved(Packet packet) { if (packet.Type == PacketType.PlaySong) { PlaySong playSong = packet.SpecificPacket as PlaySong; var desiredLevel = Plugin.masterLevelList.First(x => x.levelID == playSong.levelId); var desiredCharacteristic = desiredLevel.previewDifficultyBeatmapSets.GetBeatmapCharacteristics().First(x => x.serializedName == playSong.characteristic.SerializedName); var desiredDifficulty = (BeatmapDifficulty)playSong.difficulty; SaberUtilities.PlaySong(desiredLevel, desiredCharacteristic, desiredDifficulty, playSong); } else if (packet.Type == PacketType.LoadSong) { LoadSong loadSong = packet.SpecificPacket as LoadSong; Action <IBeatmapLevel> SongLoaded = (loadedLevel) => { var loadedSong = new LoadedSong(); var beatmapLevel = new PreviewBeatmapLevel(); beatmapLevel.Characteristics = loadedLevel.beatmapLevelData.difficultyBeatmapSets.ToList().Select(x => { var characteristic = new Characteristic(); characteristic.SerializedName = x.beatmapCharacteristic.serializedName; characteristic.difficulties = loadedLevel.beatmapLevelData.difficultyBeatmapSets .First(y => y.beatmapCharacteristic.serializedName == x.beatmapCharacteristic.serializedName) .difficultyBeatmaps.Select(y => (Characteristic.BeatmapDifficulty)y.difficulty).ToArray(); return(characteristic); }).ToArray(); beatmapLevel.LevelId = loadedLevel.levelID; beatmapLevel.Name = loadedLevel.songName; beatmapLevel.Loaded = true; loadedSong.level = beatmapLevel; client.Send(new Packet(loadedSong).ToBytes()); }; LoadSong(loadSong.levelId, SongLoaded); } else if (packet.Type == PacketType.Command) { Command command = packet.SpecificPacket as Command; if (command.commandType == Command.CommandType.ReturnToMenu) { SaberUtilities.ReturnToMenu(); } } }
private async void songListView_SelectedIndexChangedAsync(object sender, EventArgs e) { if (songListView.SelectedItems.Count >= 1) { var levelID = songListView.SelectedItems[0].ImageKey; IPreviewBeatmapLevel level = masterLevelList.Where(x => x.levelID == levelID).First(); //Clear out old info characteristicDropdown.Items.Clear(); difficultyDropdown.Items.Clear(); //Callback for when the IBeatmapLevel is loaded Action <IBeatmapLevel> SongLoaded = (loadedLevel) => { currentSelection = loadedLevel; loadedLevel.beatmapCharacteristics.ToList().ForEach(x => characteristicDropdown.Items.Add(x.serializedName)); characteristicDropdown.SelectedIndex = 0; //We'll assume we've currently selected the 0th checkbox, since, well, we have loadedLevel .beatmapLevelData.difficultyBeatmapSets.First(x => x.beatmapCharacteristic == loadedLevel.beatmapCharacteristics.First()) .difficultyBeatmaps.ToList().ForEach(x => difficultyDropdown.Items.Add(x.difficulty)); difficultyDropdown.SelectedIndex = difficultyDropdown.Items.Count - 1; }; //Load IBeatmapLevel if (level is PreviewBeatmapLevelSO || level is CustomPreviewBeatmapLevel) { if (level is PreviewBeatmapLevelSO) { if (!await SaberUtilities.HasDLCLevel(level.levelID)) { return; //In the case of unowned DLC, just bail out and do nothing } } var map = ((CustomPreviewBeatmapLevel)level).standardLevelInfoSaveData.difficultyBeatmapSets.First().difficultyBeatmaps.First(); var result = await SaberUtilities.GetLevelFromPreview(level); if (result != null && !(result?.isError == true)) { SongLoaded(result?.beatmapLevel); } } else if (level is BeatmapLevelSO) { SongLoaded(level as IBeatmapLevel); } } }
private void Client_PacketRecieved(Packet packet) { if (packet.Type == PacketType.PlaySong) { PlaySong playSong = packet.SpecificPacket as PlaySong; var desiredLevel = Plugin.masterLevelList.First(x => x.levelID == playSong.levelId); var desiredCharacteristic = desiredLevel.beatmapCharacteristics.First(x => x.serializedName == playSong.characteristic.SerializedName); var desiredDifficulty = (BeatmapDifficulty)playSong.difficulty; var playerSpecificSettings = new PlayerSpecificSettings(); playerSpecificSettings.advancedHud = playSong.playerSettings.advancedHud; playerSpecificSettings.leftHanded = playSong.playerSettings.leftHanded; playerSpecificSettings.noTextsAndHuds = playSong.playerSettings.noTextsAndHuds; playerSpecificSettings.reduceDebris = playSong.playerSettings.reduceDebris; playerSpecificSettings.staticLights = playSong.playerSettings.staticLights; var gameplayModifiers = new GameplayModifiers(); gameplayModifiers.batteryEnergy = playSong.gameplayModifiers.batteryEnergy; gameplayModifiers.disappearingArrows = playSong.gameplayModifiers.disappearingArrows; gameplayModifiers.failOnSaberClash = playSong.gameplayModifiers.failOnSaberClash; gameplayModifiers.fastNotes = playSong.gameplayModifiers.fastNotes; gameplayModifiers.ghostNotes = playSong.gameplayModifiers.ghostNotes; gameplayModifiers.instaFail = playSong.gameplayModifiers.instaFail; gameplayModifiers.noBombs = playSong.gameplayModifiers.noBombs; gameplayModifiers.noFail = playSong.gameplayModifiers.noFail; gameplayModifiers.noObstacles = playSong.gameplayModifiers.noObstacles; gameplayModifiers.songSpeed = (GameplayModifiers.SongSpeed)playSong.gameplayModifiers.songSpeed; SaberUtilities.PlaySong(desiredLevel, desiredCharacteristic, desiredDifficulty, gameplayModifiers, playerSpecificSettings); } else if (packet.Type == PacketType.LoadSong) { LoadSong loadSong = packet.SpecificPacket as LoadSong; Action <IBeatmapLevel> SongLoaded = (loadedLevel) => { var loadedSong = new LoadedSong(); var beatmapLevel = new PreviewBeatmapLevel(); beatmapLevel.Characteristics = loadedLevel.beatmapCharacteristics.ToList().Select(x => { var characteristic = new Characteristic(); characteristic.SerializedName = x.serializedName; characteristic.difficulties = loadedLevel.beatmapLevelData.difficultyBeatmapSets .First(y => y.beatmapCharacteristic.serializedName == x.serializedName) .difficultyBeatmaps.Select(y => (Characteristic.BeatmapDifficulty)y.difficulty).ToArray(); return(characteristic); }).ToArray(); beatmapLevel.LevelId = loadedLevel.levelID; beatmapLevel.Name = loadedLevel.songName; beatmapLevel.Loaded = true; loadedSong.level = beatmapLevel; client.Send(new Packet(loadedSong).ToBytes()); }; LoadSong(loadSong.levelId, SongLoaded); } else if (packet.Type == PacketType.Command) { Command command = packet.SpecificPacket as Command; if (command.commandType == Command.CommandType.ReturnToMenu) { SaberUtilities.ReturnToMenu(); } } }