static bool Prefix(ref AudioTimeSyncController.InitData ____initData) { if (Quest_SpectatorController.instance.spectating) { ____initData = new AudioTimeSyncController.InitData(____initData.audioClip, Quest_SpectatorController.instance.replaySong.replayLines[0].time, ____initData.songTimeOffset, ____initData.timeScale); } return(true); }
public void ResetTimeSync() { AudioTimeSyncController.InitData newInitData = new AudioTimeSyncController.InitData(_originalInitData.audioClip, _songStartTime, _originalInitData.songTimeOffset, _originalInitData.timeScale); _timeSync.SetPrivateField("_initData", newInitData); _timeSync.SetField("_audioStarted", false); _timeSync.SetField("_startSongTime", _songStartTime); _timeSync.SetField("_songTimeOffset", _originalInitData.songTimeOffset + _timeSync.GetField <FloatSO>("_audioLatency")); _timeSync.StartSong(); }
private IEnumerator DelayedSetup() { //Slight delay before grabbing needed objects yield return(new WaitForSeconds(0.1f)); _timeSync = Resources.FindObjectsOfTypeAll <AudioTimeSyncController>().LastOrDefault(x => x.isActiveAndEnabled); _songAudio = _timeSync.GetField <AudioSource>("_audioSource"); _levelLoader = Resources.FindObjectsOfTypeAll <CustomLevelLoader>().First(); _spawnController = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().LastOrDefault(x => x.isActiveAndEnabled); _originalSpawnMovementData = _spawnController.GetField <BeatmapObjectSpawnMovementData>("_beatmapObjectSpawnMovementData"); _pauseController = Resources.FindObjectsOfTypeAll <PauseController>().LastOrDefault(x => x.isActiveAndEnabled); _callbackController = Resources.FindObjectsOfTypeAll <BeatmapObjectCallbackController>().LastOrDefault(x => x.isActiveAndEnabled); _seManager = Resources.FindObjectsOfTypeAll <NoteCutSoundEffectManager>().LastOrDefault(x => x.isActiveAndEnabled); _beatmapObjectManager = _seManager.GetField <BeatmapObjectManager>("_beatmapObjectManager"); _cancelSource = new CancellationTokenSource(); var level = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.difficultyBeatmap.level; if (!(level is CustomPreviewBeatmapLevel)) { yield break; } _currentLevel = level as CustomPreviewBeatmapLevel; //Get DifficultyBeatmap BeatmapDifficulty levelDiff = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.difficultyBeatmap.difficulty; BeatmapCharacteristicSO levelCharacteristic = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.difficultyBeatmap.parentDifficultyBeatmapSet.beatmapCharacteristic; _currentDiffBeatmap = _currentLevel.standardLevelInfoSaveData.difficultyBeatmapSets.First( x => x.beatmapCharacteristicName == levelCharacteristic.serializedName).difficultyBeatmaps.First( x => x.difficulty == levelDiff.ToString()); _originalInitData = _timeSync.GetField <AudioTimeSyncController.InitData>("_initData"); _songStartTime = _originalInitData.startSongTime; //Initialize if everything successfully grabbed _init = true; }
public static void SetTimeScale(float value) { if (GameObjects.AudioTimeSync == null) { return; } timeScale = value; AudioTimeSyncController.InitData initData = GameObjects.AudioTimeSync.GetPrivateField <AudioTimeSyncController.InitData>("_initData"); AudioTimeSyncController.InitData newInitData = new AudioTimeSyncController.InitData(initData.audioClip, GameObjects.AudioTimeSync.songTime, initData.songTimeOffset, timeScale); GameObjects.AudioTimeSync.SetPrivateField("_initData", newInitData); //Chipmunk Removal as per base game if (timeScale == 1f) { GameObjects.Mixer.musicPitch = 1; } else { GameObjects.Mixer.musicPitch = 1f / timeScale; } ResetTimeSync(GameObjects.AudioTimeSync, timeScale, newInitData); }
public static void ResetTimeSync(AudioTimeSyncController timeSync, float newTimeScale, AudioTimeSyncController.InitData newData) { timeSync.SetField("_timeScale", newTimeScale); timeSync.SetField("_startSongTime", timeSync.songTime); timeSync.SetField("_audioStartTimeOffsetSinceStart", timeSync.GetProperty <float>("timeSinceStart") - (timeSync.songTime + newData.songTimeOffset)); timeSync.SetField("_fixingAudioSyncError", false); timeSync.SetField("_playbackLoopIndex", 0); timeSync.audioSource.pitch = newTimeScale; }