示例#1
0
 static void Prefix(BeatmapObjectSpawnController __instance, float beatsPerMinute, int noteLinesCount, ref float noteJumpMovementSpeed, float noteJumpStartBeatOffset, bool disappearingArrows, bool ghostNotes)
 {
     if (FuckeryUI.NJSFix.Enabled)
     {
         noteJumpMovementSpeed *= .8f;
     }
 }
示例#2
0
        private void Start()
        {
            if (!Plugin.IsAnythingOn)
            {
                Logger.log.Debug("Nothing is turned on!");
                EnableScore();
                return;
            }

            try
            {
                if (Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().Count() > 0)
                {
                    this._beatmapObjectSpawnController = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().First();
                }

                if (Resources.FindObjectsOfTypeAll <MoveBackWall>().Count() > 0)
                {
                    MoveBackLayer = Resources.FindObjectsOfTypeAll <MoveBackWall>().First().gameObject.layer;
                }

                if (_beatmapObjectSpawnController != null)
                {
                    _beatmapObjectSpawnController.obstacleDiStartMovementEvent += this.HandleObstacleDiStartMovementEvent;
                }

                setupCams();
            }
            catch (Exception ex)
            {
                Logger.log.Error($"TransparentWall.Start() has thrown an exception: {ex.Message}\n{ex.StackTrace}");
            }
        }
示例#3
0
        private IEnumerator GetBeatmapObjectSpawnController()
        {
            bool loaded = false;

            while (!loaded)
            {
                _BMSpawnController = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().FirstOrDefault();
                if (_BMSpawnController == null)
                {
                    yield return(new WaitForSeconds(0.1f));
                }
                else
                {
                    loaded = true;
                }
            }

            if (_BMSpawnController != null)
            {
                if (_bomb || _hit)
                {
                    _BMSpawnController.noteWasCutEvent += _BMSpawnController_noteWasCutEvent;
                }
                if (_miss)
                {
                    _BMSpawnController.noteDidStartJumpEvent += _BMSpawnController_noteDidStartJumpEvent;
                }
            }
        }
        private IEnumerator Start()
        {
            yield return(FindComponentInBeatSaber(SearchTimeout, (HapticFeedbackController Result) => HapticFeedbackController = Result));

            yield return(FindComponentInBeatSaber(SearchTimeout, (NoteCutEffectSpawner Result) => NoteCutEffectSpawner = Result));

            if (HapticFeedbackController == null)
            {
                Logger.log.Error("Haptic Feedback Controller not found!");
                yield break;
            }

            if (NoteCutEffectSpawner == null)
            {
                Logger.log.Error("Note Cut Spawner not found!");
                yield break;
            }

            FieldInfo field = NoteCutEffectSpawner.GetType().GetField("_beatmapObjectSpawnController", BindingFlags.Instance | BindingFlags.NonPublic);

            BeatmapObjectSpawnController = field.GetValue(NoteCutEffectSpawner) as BeatmapObjectSpawnController;

            if (BeatmapObjectSpawnController == null)
            {
                Logger.log.Error("Beatmap object spawner not found");
                yield break;
            }

            BeatmapObjectSpawnController.noteWasCutEvent += BeatmapObjectSpawnController_noteWasCutEvent;
        }
示例#5
0
        public void Init(OnlinePlayerController newOwner, OnlineBeatmapCallbackController callbackController, OnlineAudioTimeController syncController)
        {
            BeatmapObjectSpawnController original = FindObjectsOfType <BeatmapObjectSpawnController>().First(x => !x.name.StartsWith("Online"));

            foreach (FieldInfo info in original.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Default).Where(x => !x.Name.ToLower().Contains("event")))
            {
                info.SetValue(this, info.GetValue(original));
            }

            owner = newOwner;

            onlineCallbackController         = callbackController;
            _beatmapObjectCallbackController = onlineCallbackController;
            onlineSyncController             = syncController;

            if (onlineCallbackController != null)
            {
                _noteSpawnCallbackId = onlineCallbackController.AddBeatmapObjectCallback(new BeatmapObjectCallbackController.BeatmapObjectCallback(BeatmapObjectSpawnCallback), _spawnAheadTime);
            }

            _localPlayer         = FindObjectsOfType <PlayerController>().First(x => !x.name.Contains("Online"));
            _localSyncController = FindObjectsOfType <AudioTimeSyncController>().First(x => !x.name.Contains("Online"));

            (this as BeatmapObjectSpawnController).noteWasMissedEvent += FindObjectOfType <MissedNoteEffectSpawner>().HandleNoteWasMissed;
            (this as BeatmapObjectSpawnController).noteWasCutEvent    += FindObjectOfType <NoteCutSoundEffectManager>().HandleNoteWasCut;
            (this as BeatmapObjectSpawnController).noteWasCutEvent    += FindObjectOfType <BombCutSoundEffectManager>().HandleNoteWasCut;
            (this as BeatmapObjectSpawnController).noteWasCutEvent    += FindObjectOfType <NoteCutEffectSpawner>().HandleNoteWasCutEvent;

            _activeNotes     = new List <NoteController>();
            _activeObstacles = new List <ObstacleController>();
        }
示例#6
0
        private void Start()
        {
            if (!Plugin.IsTranparentWall)
            {
                Logger.log.Debug("Transparent wall is disabled!");
                return;
            }
            try
            {
                if (Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().Count() > 0)
                {
                    Logger.log.Debug("Found BeatmapObjectSpawnController!");
                    _beatmapObjectSpawnController = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().First();
                }
                if (Resources.FindObjectsOfTypeAll <MoveBackWall>().Count() > 0)
                {
                    MoveBackLayer = Resources.FindObjectsOfTypeAll <MoveBackWall>().First().gameObject.layer;
                    Logger.log.Debug("Found MoveBackWall! Using MoveBackLayer=" + MoveBackLayer);
                }
                if (_beatmapObjectSpawnController != null)
                {
                    Logger.log.Debug("Setup obstacleDidStartMovementEvent hook!");
                    _beatmapObjectSpawnController.obstacleDiStartMovementEvent += HandleObstacleDidStartMovementEvent;
                }

                setupCams();
            }
            catch (Exception ex)
            {
                Logger.log.Error(ex);
            }
        }
        public void Init(BeatmapObjectSpawnController spawner, NoteController note)
        {
            _note = note;
            var newNote = new NoteData(note.noteData.id, note.noteData.time, note.noteData.lineIndex, note.noteData.noteLineLayer + 2, note.noteData.noteLineLayer + 2, NoteType.Bomb, NoteCutDirection.Any, note.noteData.timeToNextBasicNote, note.noteData.timeToPrevBasicNote);

            spawner.NoteSpawnCallback(newNote);
        }
示例#8
0
        private void SliceCallBack(BeatmapObjectSpawnController beatmapObjectSpawnController, NoteController noteController, NoteCutInfo noteCutInfo)
        {
            if (!noteCutInfo.allIsOK)
            {
                _leftEventManager?.OnComboBreak?.Invoke();
                _rightEventManager?.OnComboBreak?.Invoke();
            }
            else
            {
                if (noteCutInfo.saberType == Saber.SaberType.SaberA)
                {
                    _leftEventManager?.OnSlice?.Invoke();
                }
                else if (noteCutInfo.saberType == Saber.SaberType.SaberB)
                {
                    _rightEventManager?.OnSlice?.Invoke();
                }
            }

            if (noteController.noteData.id == LastNoteId)
            {
                _leftEventManager?.OnLevelEnded?.Invoke();
                _rightEventManager?.OnLevelEnded?.Invoke();
            }
        }
示例#9
0
        public static void AdjustNJS(float njs, BeatmapObjectSpawnController _spawnController)
        {

            float halfJumpDur = 4f;
            float maxHalfJump = _spawnController.GetPrivateField<float>("_maxHalfJumpDistance");
            float noteJumpStartBeatOffset = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.difficultyBeatmap.noteJumpStartBeatOffset;
            float moveSpeed = _spawnController.GetPrivateField<float>("_moveSpeed");
            float moveDir = _spawnController.GetPrivateField<float>("_moveDurationInBeats");
            float jumpDis;
            float spawnAheadTime;
            float moveDis;
            float bpm = _spawnController.GetPrivateField<float>("_beatsPerMinute");
            float num = 60f / bpm;
            moveDis = moveSpeed * num * moveDir;
            while (njs * num * halfJumpDur > maxHalfJump)
            {
                halfJumpDur /= 2f;
            }
            halfJumpDur += noteJumpStartBeatOffset;
            if (halfJumpDur < 1f) halfJumpDur = 1f;
            //        halfJumpDur = spawnController.GetPrivateField<float>("_halfJumpDurationInBeats");
            jumpDis = njs * num * halfJumpDur * 2f;
            spawnAheadTime = moveDis / moveSpeed + jumpDis * 0.5f / njs;
            _spawnController.SetPrivateField("_halfJumpDurationInBeats", halfJumpDur);
            _spawnController.SetPrivateField("_spawnAheadTime", spawnAheadTime);
            _spawnController.SetPrivateField("_jumpDistance", jumpDis);
            _spawnController.SetPrivateField("_noteJumpMovementSpeed", njs);
            _spawnController.SetPrivateField("_moveDistance", moveDis);


        }
示例#10
0
        public StatKeeper()
        {
            Logger.log.Info("2 New statkeeper active.");
            CutChart = new GameObject();
            Object.DontDestroyOnLoad(CutChart);
            //Utilities.SetGameObjectTransform(CutChart, Vector3.zero, Quaternion.identity, Vector3.zero);
            CutChart.SetActive(true);

            //CutChart.transform.position = Vector3.zero;
            CutChart.transform.localScale = Vector3.one;
            //CutChart.transform.rotation = Quaternion.identity;
            CutChart.transform.SetPositionAndRotation(Vector3.zero, gridRotation);

            CutChart.transform.localScale = Vector3.zero;

            cutPoints = new List <GameObject>();

            _scoreController = Resources.FindObjectsOfTypeAll <ScoreController>().First();
            _sceneData       = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData;
            BOSC             = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().First();

            songDifficulty = _sceneData.difficultyBeatmap.difficulty.ToString().ToLower();
            songName       = _sceneData.difficultyBeatmap.level.songName;
            songNoteCount  = _sceneData.difficultyBeatmap.beatmapData.cuttableNotesType;

            GetScoreController().noteWasMissedEvent += OnNoteMissed;
            GetBOM().noteWasCutEvent += OnNoteCut;

            //BSEvents.songPaused += OnPause;
            //BSEvents.songUnpaused += UnPause;
        }
 private void _spawnController_noteWasMissedEvent(BeatmapObjectSpawnController arg1, NoteController noteController)
 {
     if (noteController.noteData.noteType != NoteType.Bomb && Config.failOnMiss)
     {
         Fail();
     }
 }
示例#12
0
 private void Spawner_noteWasMissedEvent(BeatmapObjectSpawnController spawner, NoteController note)
 {
     if (note.noteData.noteType != NoteType.Bomb)
     {
         HueManager.missTime = (object)DateTimeOffset.UtcNow;
     }
 }
示例#13
0
 private static void MissHell_noteWasCutEvent(BeatmapObjectSpawnController arg1, NoteController arg2, NoteCutInfo arg3)
 {
     if (!arg3.allIsOK)
     {
         NoteMissed();
     }
 }
示例#14
0
 private static void MissHell_noteWasMissedEvent(BeatmapObjectSpawnController arg1, NoteController arg2)
 {
     if (arg2.noteData.noteType != NoteType.Bomb)
     {
         NoteMissed();
     }
 }
示例#15
0
        private void SpawnController_ScaleRemoveCut(BeatmapObjectSpawnController arg1, NoteController controller, NoteCutInfo arg3)
        {
            NoteData  note          = controller.noteData;
            Transform noteTransform = controller.GetField <Transform>("_noteTransform");

            //      Log("DESPAWN" + noteTransform.localScale.ToString());
            if (noteTransform.localScale.x != 1)
            {
                noteTransform.localScale = new Vector3(1f, 1f, 1f);
            }
            //          Log("DESPAWN" + noteTransform.localScale.ToString());



            //     if (modifiedNotes[note.id] != null)
            //          note = modifiedNotes[note.id];

            FloatBehavior behavior = noteTransform.gameObject.GetComponent <FloatBehavior>();

            if (behavior != null)
            {
                noteTransform.localPosition = new Vector3(behavior.originalX, behavior.originalY, noteTransform.localPosition.z);
                GameObject.Destroy(behavior);
            }
        }
        private void Start()
        {
            if (!Plugin.IsTranparentWall)
            {
                return;
            }
            try
            {
                if (Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().Count() > 0)
                {
                    this._beatmapObjectSpawnController = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().First();
                }
                if (Resources.FindObjectsOfTypeAll <MoveBackWall>().Count() > 0)
                {
                    MoveBackLayer = Resources.FindObjectsOfTypeAll <MoveBackWall>().First().gameObject.layer;
                }
                if (_beatmapObjectSpawnController != null)
                {
                    _beatmapObjectSpawnController.obstacleDiStartMovementEvent += this.HandleObstacleDiStartMovementEvent;
                }

                setupCams();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
            }
        }
示例#17
0
        internal static IEnumerator DelayedStart(BeatmapObjectSpawnController beatmapObjectSpawnController)
        {
            yield return(new WaitForEndOfFrame());

            BeatmapObjectSpawnController = beatmapObjectSpawnController;

            // prone to breaking if anything else implements these interfaces
            BeatmapObjectManager            beatmapObjectManager = _beatmapObjectSpawnAccessor(ref beatmapObjectSpawnController) as BeatmapObjectManager;
            BeatmapObjectCallbackController coreSetup            = _callbackControllerAccessor(ref beatmapObjectSpawnController) as BeatmapObjectCallbackController;

            IAudioTimeSource = _audioTimeSourceAccessor(ref coreSetup);
            IReadonlyBeatmapData beatmapData = _beatmapDataAccessor(ref coreSetup);

            beatmapObjectManager.noteWasCutEvent -= NoteColorizer.ColorizeSaber;
            beatmapObjectManager.noteWasCutEvent += NoteColorizer.ColorizeSaber;

            if (Harmony.HasAnyPatches(HARMONYID))
            {
                if (beatmapData is CustomBeatmapData customBeatmap)
                {
                    if (ChromaConfig.Instance.EnvironmentEnhancementsEnabled)
                    {
                        EnvironmentEnhancementManager.Init(customBeatmap, beatmapObjectSpawnController.noteLinesDistance);
                    }
                }

                // please let me kill legacy
                LegacyLightHelper.Activate(beatmapData.beatmapEventsData);
            }
        }
示例#18
0
 private void Awake()
 {
     _twitchCore      = TwitchCore.Instance;
     _spawnController = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().FirstOrDefault();
     _spawnController.noteWasCutEvent           += NoteCut;
     AlphaTwitchManager.Instance.EmoteProcessed += EmoteProcessed;
     _twitchCore.MessageReceived += MessageReceived;
 }
示例#19
0
        private void _BMSpawnController_noteDidStartJumpEvent(BeatmapObjectSpawnController arg1, NoteController arg2)
        {
            NoteMovement nm = arg2.GetComponent <NoteMovement>();

            if (nm != null && (arg2.noteData.noteType == NoteType.NoteA || arg2.noteData.noteType == NoteType.NoteB))
            {
                nm.noteDidPassMissedMarkerEvent += Nm_noteDidPassMissedMarkerEvent;
            }
        }
示例#20
0
        private void BeatmapObjectSpawnController_noteWasCutEvent(BeatmapObjectSpawnController NoteSpawnController, NoteController NoteController, NoteCutInfo NoteCutInfo)
        {
            if (HapticFeedbackController == null)
            {
                return;
            }

            RumblingHands[NoteCutInfo.saberType].Rumble();
        }
示例#21
0
        private void SpawnController_ModifiedJump(BeatmapObjectSpawnController arg1, NoteController controller)
        {
            if (GMPUI.rainbow)
            {
                Utilities.Rainbow.RandomizeColors();
                ColorManager?.RefreshColors();
            }

            Transform noteTransform = controller.GetField <Transform>("_noteTransform");

            //       noteTransform.Translate(0f, 4f, 0f);
            if (GMPUI.funky)
            {
                noteTransform.gameObject.AddComponent <FloatBehavior>();
            }


            if (!haveSongNJS)
            {
                songNJS     = spawnController.GetField <float>("_noteJumpMovementSpeed");
                haveSongNJS = true;
            }

            //          Transform noteTransform = controller.GetField<Transform>("_noteTransform");
            //       Log("SPAWN" + noteTransform.localScale.ToString());
            if (GMPUI.chatIntegration || GMPUI.randomSize || Multiplayer.MultiMain.multiActive)
            {
                if (superRandom)
                {
                    noteTransform.localScale *= UnityEngine.Random.Range(ChatConfig.randomMin, ChatConfig.randomMax);
                }
                else
                {
                    if (!GMPUI.randomSize)
                    {
                        noteTransform.localScale *= altereddNoteScale;
                    }

                    if (GMPUI.randomSize)
                    {
                        noteTransform.localScale *= UnityEngine.Random.Range(ChatConfig.randomMin, ChatConfig.randomMax);
                    }
                }
            }

            //     Log("SPAWN" + noteTransform.localScale.ToString());

            if (GMPUI.fixedNoteScale != 1f)
            {
                //    Transform noteTransform = controller.GetField<Transform>("_noteTransform");
                //       Log("SPAWN" + noteTransform.localScale.ToString());
                noteTransform.localScale *= GMPUI.fixedNoteScale;
                //     Log("SPAWN" + noteTransform.localScale.ToString());
            }

            NoteData note = controller.noteData;
        }
        private static void Postfix(BeatmapObjectSpawnController __instance, IBeatmapObjectSpawner ____beatmapObjectSpawner, BeatmapObjectSpawnMovementData ____beatmapObjectSpawnMovementData)
        {
            BeatmapObjectSpawnController = __instance;

            if (____beatmapObjectSpawner is BasicBeatmapObjectManager basicBeatmapObjectManager)
            {
                BeatmapObjectManager = basicBeatmapObjectManager;
                SpawnDataHelper.InitBeatmapObjectSpawnController(____beatmapObjectSpawnMovementData);
            }
        }
示例#23
0
 private void LoadGameObjects()
 {
     levelFailController = Resources.FindObjectsOfTypeAll <StandardLevelFailedController>().LastOrDefault();
     spawnController     = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().LastOrDefault();
     spawnMovementData   = spawnController.GetField <BeatmapObjectSpawnMovementData, BeatmapObjectSpawnController>("_beatmapObjectSpawnMovementData");
     callbackController  = spawnController.GetField <BeatmapCallbacksController, BeatmapObjectSpawnController>("_beatmapCallbacksController");
     soundEffectManager  = Resources.FindObjectsOfTypeAll <NoteCutSoundEffectManager>().LastOrDefault();
     audioTimeSync       = Resources.FindObjectsOfTypeAll <AudioTimeSyncController>().LastOrDefault();
     songAudio           = audioTimeSync.GetField <AudioSource, AudioTimeSyncController>("_audioSource");
 }
示例#24
0
 void Awake()
 {
     _energyCounter     = null;
     _BMSpawnController = null;
     bFailed            = false;
     LoadSoundEffects();
     StartCoroutine(GetEnergyCounter());
     StartCoroutine(GetBeatmapObjectSpawnController());
     StartCoroutine(GetMainAudioEffects());
 }
示例#25
0
        internal static void setupStuff()
        {
            SpawnController  = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().FirstOrDefault();
            PauseManager     = Resources.FindObjectsOfTypeAll <StandardLevelGameplayManager>().FirstOrDefault();
            PlayerController = Resources.FindObjectsOfTypeAll <PlayerController>().FirstOrDefault();

            SaberManager = PlayerController.GetField("_saberManager") as SaberManager;
            leftSaber    = SaberManager.GetPrivateField <Saber>("_leftSaber") as Saber;
            rightSaber   = SaberManager.GetPrivateField <Saber>("_rightSaber") as Saber;
        }
示例#26
0
        internal static void ResetHell()
        {
            SpawnController.noteWasMissedEvent -= MissHell_noteWasMissedEvent;
            SpawnController.noteWasCutEvent    -= MissHell_noteWasCutEvent;
            SpawnController = null;

            PauseManager = null;
            SaberManager = null;

            PlayerController.transform.position = StartPosition;
        }
示例#27
0
 private void Spawner_noteWasCutEvent(BeatmapObjectSpawnController spawner, NoteController note, NoteCutInfo info)
 {
     if (info.allIsOK)
     {
         HueManager.cutTime = (object)DateTimeOffset.UtcNow;
     }
     else
     {
         HueManager.missTime = (object)DateTimeOffset.UtcNow;
     }
 }
示例#28
0
        public static void SetNJS(BeatmapObjectSpawnController spawnController)
        {
            BeatmapObjectSpawnMovementData spawnMovementData = spawnController.GetField <BeatmapObjectSpawnMovementData, BeatmapObjectSpawnController>("_beatmapObjectSpawnMovementData");

            var bpm = spawnController.GetField <VariableBpmProcessor, BeatmapObjectSpawnController>("_variableBPMProcessor").currentBpm;

            spawnMovementData.SetField("_startNoteJumpMovementSpeed", BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.difficultyBeatmap.noteJumpMovementSpeed);
            spawnMovementData.SetField("_noteJumpStartBeatOffset", BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.difficultyBeatmap.noteJumpStartBeatOffset);

            spawnMovementData.Update(bpm, spawnController.GetField <float, BeatmapObjectSpawnController>("_jumpOffsetY"));
        }
        internal ShaderEventManager(DiContainer Container, ShaderCore shaderCore, ShaderManager shaderManager, PluginConfig pluginConfig, [InjectOptional] BeatmapObjectSpawnController beatmapObjectSpawnController, [InjectOptional] IDifficultyBeatmap difficultyBeatmap)
        {
            _container = Container;

            _shaderCore    = shaderCore;
            _shaderManager = shaderManager;
            _pluginConfig  = pluginConfig;

            _beatmapObjectSpawnController = beatmapObjectSpawnController;
            _difficultyBeatmap            = difficultyBeatmap;
        }
示例#30
0
        private void _spawnController_noteWasCutEvent(BeatmapObjectSpawnController arg1, NoteController noteController, NoteCutInfo arg3)
        {
            NoteData note = noteController.noteData;

            if (note.noteType != NoteType.Bomb && _notesLeftCounter != null)
            {
                if (_notesLeftCounter != null)
                {
                    _notesLeftCounter.UpdateCounter();
                }
            }
        }