Esempio n. 1
0
 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);
 }
Esempio n. 2
0
 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();
 }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 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;
 }