protected override void Client_PlaySong(IPreviewBeatmapLevel desiredLevel, BeatmapCharacteristicSO desiredCharacteristic, BeatmapDifficulty desiredDifficulty, GameplayModifiers gameplayModifiers, PlayerSpecificSettings playerSpecificSettings, OverrideEnvironmentSettings overrideEnvironmentSettings, ColorScheme colorScheme, bool useFloatingScoreboard = false, bool useSync = false, bool disablePause = false, bool disableFail = false) { base.Client_PlaySong(desiredLevel, desiredCharacteristic, desiredDifficulty, gameplayModifiers, playerSpecificSettings, overrideEnvironmentSettings, colorScheme, useFloatingScoreboard, useSync, disablePause, disableFail); //Set up per-play settings Plugin.UseSync = useSync; Plugin.UseFloatingScoreboard = useFloatingScoreboard; Plugin.DisablePause = disablePause; Plugin.DisableFail = disableFail; //Reset score (Plugin.client.Self as Player).Score = 0; (Plugin.client.Self as Player).Accuracy = 0; var playerUpdate = new Event(); playerUpdate.Type = Event.EventType.PlayerUpdated; playerUpdate.ChangedObject = Plugin.client.Self; Plugin.client.Send(new Packet(playerUpdate)); UnityMainThreadDispatcher.Instance().Enqueue(() => { //If the player is still on the results screen, go ahead and boot them out if (_resultsViewController.isInViewControllerHierarchy) { resultsViewController_continueButtonPressedEvent(null); } SongUtils.PlaySong(desiredLevel, desiredCharacteristic, desiredDifficulty, overrideEnvironmentSettings, colorScheme, gameplayModifiers, playerSpecificSettings, SongFinished); }); }
private void PlaySong(Song song) { MenuTransitionsHelper menuTransitionHelper = Resources.FindObjectsOfTypeAll <MenuTransitionsHelper>().FirstOrDefault(); var playerSettings = _playerDataModel.playerData.playerSpecificSettings; //Override defaults if we have forced options enabled if (song.PlayerOptions != PlayerOptions.None) { playerSettings = new PlayerSpecificSettings(); playerSettings.leftHanded = song.PlayerOptions.HasFlag(PlayerOptions.Mirror); playerSettings.staticLights = song.PlayerOptions.HasFlag(PlayerOptions.StaticLights); playerSettings.noTextsAndHuds = song.PlayerOptions.HasFlag(PlayerOptions.NoHud); playerSettings.advancedHud = song.PlayerOptions.HasFlag(PlayerOptions.AdvancedHud); playerSettings.reduceDebris = song.PlayerOptions.HasFlag(PlayerOptions.ReduceDebris); } GameplayModifiers gameplayModifiers = new GameplayModifiers(); gameplayModifiers.noFail = song.GameOptions.HasFlag(GameOptions.NoFail); gameplayModifiers.noBombs = song.GameOptions.HasFlag(GameOptions.NoBombs); gameplayModifiers.noObstacles = song.GameOptions.HasFlag(GameOptions.NoObstacles); if (song.GameOptions.HasFlag(GameOptions.SlowSong)) { gameplayModifiers.songSpeed = GameplayModifiers.SongSpeed.Slower; } else if (song.GameOptions.HasFlag(GameOptions.FastSong)) { gameplayModifiers.songSpeed = GameplayModifiers.SongSpeed.Faster; } gameplayModifiers.instaFail = song.GameOptions.HasFlag(GameOptions.InstaFail); gameplayModifiers.failOnSaberClash = song.GameOptions.HasFlag(GameOptions.FailOnClash); gameplayModifiers.batteryEnergy = song.GameOptions.HasFlag(GameOptions.BatteryEnergy); gameplayModifiers.fastNotes = song.GameOptions.HasFlag(GameOptions.FastNotes); gameplayModifiers.disappearingArrows = song.GameOptions.HasFlag(GameOptions.DisappearingArrows); gameplayModifiers.ghostNotes = song.GameOptions.HasFlag(GameOptions.GhostNotes); var colorSchemeSettings = _playerDataModel.playerData.colorSchemesSettings; SongUtils.PlaySong(song.PreviewBeatmap, song.Beatmap.parentDifficultyBeatmapSet.beatmapCharacteristic, song.Beatmap.difficulty, _playerDataModel.playerData.overrideEnvironmentSettings, colorSchemeSettings.GetColorSchemeForId(colorSchemeSettings.selectedColorSchemeId), gameplayModifiers, playerSettings, SongFinished); }
private void songDetail_didPressPlayButtonEvent(IBeatmapLevel level, BeatmapCharacteristicSO characteristic, BeatmapDifficulty difficulty) { _lastPlayedBeatmapLevel = level; _lastPlayedCharacteristic = characteristic; _lastPlayedDifficulty = difficulty; var playerData = Resources.FindObjectsOfTypeAll <PlayerDataModel>().First().playerData; var playerSettings = playerData.playerSpecificSettings; //Override defaults if we have forced options enabled if (_currentParameters.PlayerSettings.Options != PlayerOptions.None) { playerSettings = new PlayerSpecificSettings( _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.StaticLights), _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.LeftHanded), _currentParameters.PlayerSettings.PlayerHeight, _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.AutoPlayerHeight), _currentParameters.PlayerSettings.SfxVolume, _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.ReduceDebris), _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.NoHud), _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.NoFailEffects), _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.AdvancedHud), _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.AutoRestart), _currentParameters.PlayerSettings.SaberTrailIntensity, _currentParameters.PlayerSettings.NoteJumpStartBeatOffset, _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.HideNoteSpawnEffect), _currentParameters.PlayerSettings.Options.HasFlag(PlayerOptions.AdaptiveSfx) ); } var songSpeed = GameplayModifiers.SongSpeed.Normal; if (_currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.SlowSong)) { songSpeed = GameplayModifiers.SongSpeed.Slower; } if (_currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.FastSong)) { songSpeed = GameplayModifiers.SongSpeed.Faster; } var gameplayModifiers = new GameplayModifiers( _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.DemoNoFail), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.DemoNoObstacles), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.BatteryEnergy) ? GameplayModifiers.EnergyType.Battery : GameplayModifiers.EnergyType.Bar, _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.NoFail), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.InstaFail), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.FailOnClash), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.NoObstacles) ? GameplayModifiers.EnabledObstacleType.NoObstacles : GameplayModifiers.EnabledObstacleType.All, _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.NoBombs), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.FastNotes), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.StrictAngles), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.DisappearingArrows), songSpeed, _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.NoArrows), _currentParameters.GameplayModifiers.Options.HasFlag(GameOptions.GhostNotes) ); var colorScheme = playerData.colorSchemesSettings.overrideDefaultColors ? playerData.colorSchemesSettings.GetSelectedColorScheme() : null; //Disable scores if we need to if (((QualifierEvent.EventSettings)Event.Flags).HasFlag(QualifierEvent.EventSettings.DisableScoresaberSubmission)) { BS_Utils.Gameplay.ScoreSubmission.DisableSubmission(SharedConstructs.Name); } SongUtils.PlaySong(level, characteristic, difficulty, playerData.overrideEnvironmentSettings, colorScheme, gameplayModifiers, playerSettings, SongFinished); }