diff --git a/BeatSaberTweaks/BeatSaberTweaks.csproj b/BeatSaberTweaks/BeatSaberTweaks.csproj index 4af389b..ac79ca3 100644 --- a/BeatSaberTweaks/BeatSaberTweaks.csproj +++ b/BeatSaberTweaks/BeatSaberTweaks.csproj @@ -34,11 +34,14 @@ - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\Assembly-CSharp.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\Assembly-CSharp.dll False + + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Plugins\BeatSaberCustomUI.dll + - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\IllusionPlugin.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\IllusionPlugin.dll False @@ -48,35 +51,35 @@ - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\TextMeshPro-1.0.55.2017.1.0b12.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\TextMeshPro-1.0.55.2017.1.0b12.dll False - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.dll False - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.AudioModule.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.AudioModule.dll False - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.CoreModule.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.CoreModule.dll False - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.JSONSerializeModule.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.JSONSerializeModule.dll False - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.UI.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.UI.dll False - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.UIElementsModule.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.UIElementsModule.dll False - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.UIModule.dll + ..\..\..\SteamLibrary\steamapps\common\Beat Saber\Beat Saber_Data\Managed\UnityEngine.UIModule.dll False @@ -88,7 +91,8 @@ - + + @@ -102,4 +106,7 @@ + + copy /Y "$(TargetPath)" "F:\SteamLibrary\steamapps\common\Beat Saber\Plugins" + \ No newline at end of file diff --git a/BeatSaberTweaks/Plugin.cs b/BeatSaberTweaks/Plugin.cs index 9850dde..8ad29ad 100644 --- a/BeatSaberTweaks/Plugin.cs +++ b/BeatSaberTweaks/Plugin.cs @@ -2,19 +2,35 @@ using System.Collections.Generic; using System.Linq; using IllusionPlugin; - +using UnityEngine; namespace BeatSaberTweaks { public class Plugin : IPlugin { public string Name => "Beat Saber Tweaks"; #if NewUI - public string Version => "3.4"; + public string Version => "4.0"; #else public string Version => "3.3.2"; #endif private bool _init = false; + private BeatmapCharacteristicSelectionViewController _characteristicViewController; + private static SoloFreePlayFlowCoordinator _soloFlowCoordinator; + private static PartyFreePlayFlowCoordinator _partyFlowCoordinator; + + private static PracticeViewController _practiceViewController; + private static StandardLevelDetailViewController _soloDetailView; + private static bool debug = true; + public static bool party { get; private set; } = false; + + public static string _gameplayMode { get; private set; } + public enum LogLevel + { + DebugOnly = 0, + Info = 1, + Error = 2 + } public void OnApplicationStart() { @@ -22,8 +38,68 @@ public void OnApplicationStart() _init = true; Settings.Load(); - SettingsUI.OnLoad(); + //SettingsUI.OnLoad(); TweakManager.OnLoad(); + UnityEngine.SceneManagement.SceneManager.activeSceneChanged += SceneManager_activeSceneChanged; + } + + private void SceneManager_activeSceneChanged(UnityEngine.SceneManagement.Scene arg0, UnityEngine.SceneManagement.Scene arg1) + { + if(arg1.name == "Menu") + { + if (_characteristicViewController == null) + { + _characteristicViewController = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + if (_characteristicViewController == null) return; + + _characteristicViewController.didSelectBeatmapCharacteristicEvent += _characteristicViewController_didSelectBeatmapCharacteristicEvent; + } + + if (_soloFlowCoordinator == null) + { + _soloFlowCoordinator = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + if (_soloFlowCoordinator == null) return; + _soloDetailView = _soloFlowCoordinator.GetPrivateField("_levelDetailViewController"); + _practiceViewController = _soloFlowCoordinator.GetPrivateField("_practiceViewController"); + if (_soloDetailView != null) + _soloDetailView.didPressPlayButtonEvent += _soloDetailView_didPressPlayButtonEvent; + else + Log("Detail View Null", Plugin.LogLevel.Info); + if (_practiceViewController != null) + _practiceViewController.didPressPlayButtonEvent += _practiceViewController_didPressPlayButtonEvent; + else + Log("Practice View Null", Plugin.LogLevel.Info); + + } + + if (_partyFlowCoordinator == null) + { + _partyFlowCoordinator = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + } + + + } + } + + private void _practiceViewController_didPressPlayButtonEvent() + { + Log("Play Button Press ", Plugin.LogLevel.Info); + party = _partyFlowCoordinator.isActivated; + Log(party.ToString(), Plugin.LogLevel.Info); + } + + private void _soloDetailView_didPressPlayButtonEvent(StandardLevelDetailViewController obj) + { + Log("Play Button Press " , Plugin.LogLevel.Info); + party = _partyFlowCoordinator.isActivated; + Log(party.ToString(), Plugin.LogLevel.Info); + } + + + + private void _characteristicViewController_didSelectBeatmapCharacteristicEvent(BeatmapCharacteristicSelectionViewController arg1, BeatmapCharacteristicSO arg2) + { + _gameplayMode = arg2.characteristicName; } public void OnApplicationQuit() @@ -46,5 +122,10 @@ public void OnUpdate() public void OnFixedUpdate() { } + + public static void Log(string input, Plugin.LogLevel logLvl) + { + if (logLvl >= LogLevel.Info || debug) Console.WriteLine("[! ! ! ! Beat Saber Tweaks ! ! ! !]: " + input); + } } } diff --git a/BeatSaberTweaks/TweakManager.cs b/BeatSaberTweaks/TweakManager.cs index 2081065..930c927 100644 --- a/BeatSaberTweaks/TweakManager.cs +++ b/BeatSaberTweaks/TweakManager.cs @@ -10,10 +10,8 @@ using VRUIControls; using TMPro; using IllusionPlugin; - -#if NewUI -using BeatSaberUI; -#endif +using CustomUI.BeatSaber; +using CustomUI.Settings; namespace BeatSaberTweaks { @@ -23,8 +21,6 @@ public class TweakManager : MonoBehaviour MainMenuViewController _mainMenuViewController = null; SimpleDialogPromptViewController prompt = null; - static MainGameSceneSetupData _mainGameSceneSetupData = null; - float carTime = 0; public static void OnLoad() @@ -42,7 +38,7 @@ public void Awake() SceneManager.sceneLoaded += SceneManager_sceneLoaded; DontDestroyOnLoad(gameObject); - Console.WriteLine("Tweak Manager started."); + Plugin.Log("Tweak Manager started.", Plugin.LogLevel.DebugOnly); MoveEnergyBar.OnLoad(transform); ScoreMover.OnLoad(transform); @@ -60,11 +56,16 @@ public void Awake() private void SceneManager_sceneLoaded(Scene arg0, LoadSceneMode arg1) { - //Console.WriteLine("Loaded: " + arg0.name); + if(arg0.name == "Menu") + CreateUI(); } public void Update() { + /* + * TODO + * This is to enable the flying cars easteregg. + * Is this even still in the game? if (SettingsUI.isMenuScene(SceneManager.GetActiveScene())) { if (_mainMenuViewController.childViewController == null && @@ -85,8 +86,12 @@ public void Update() carTime = 0; } } + */ } + /* + * TODO + * More flyingcars stuff private void CarEvent(SimpleDialogPromptViewController viewController, bool ok) { viewController.didFinishEvent -= CarEvent; @@ -97,20 +102,17 @@ private void CarEvent(SimpleDialogPromptViewController viewController, bool ok) FlyingCar.startflyingCars = ok; viewController.DismissModalViewController(null, false); } + */ public static bool IsPartyMode() { - if (_mainGameSceneSetupData == null) - { - _mainGameSceneSetupData = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - } - - if (_mainGameSceneSetupData == null) - { + Plugin.Log(Plugin.party.ToString(), Plugin.LogLevel.Info); + if (Plugin.party) + return true; + else return false; - } - return _mainGameSceneSetupData.gameplayMode == GameplayMode.PartyStandard; + } public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) @@ -118,22 +120,26 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) try { //Console.WriteLine("Active: " + scene.name); - if (SettingsUI.isMenuScene(scene)) + if (SceneUtils.isMenuScene(scene)) { + Plugin.Log("TweakManager isMenuScene", Plugin.LogLevel.DebugOnly); _mainMenuViewController = Resources.FindObjectsOfTypeAll().First(); - var _menuMasterViewController = Resources.FindObjectsOfTypeAll().First(); - prompt = ReflectionUtil.GetPrivateField(_menuMasterViewController, "_simpleDialogPromptViewController"); - - CreateUI(); + //var _menuMasterViewController = Resources.FindObjectsOfTypeAll().First(); + //prompt = ReflectionUtil.GetPrivateField(_menuMasterViewController, "_simpleDialogPromptViewController"); + } + else + { + Plugin.Log("TweakManager not in menu scene", Plugin.LogLevel.DebugOnly); } }catch (Exception e) { - Console.WriteLine("Tweaks (Manager) done fucked up: " + e); + Plugin.Log("TweakManager scene changed error: " + e, Plugin.LogLevel.Error); } } private void CreateUI() { + Plugin.Log("TweakManager creating the BSTweaks UI", Plugin.LogLevel.DebugOnly); var subMenu2 = SettingsUI.CreateSubMenu("Interface Tweaks"); var energyBar = subMenu2.AddBool("Move Energy Bar"); @@ -290,6 +296,7 @@ private void Warning_didFinishEvent(SimpleDialogPromptViewController viewControl } */ + /* private void Prompt_didFinishEvent(SimpleDialogPromptViewController viewController, bool ok) { viewController.didFinishEvent -= Prompt_didFinishEvent; @@ -307,5 +314,6 @@ private void Prompt_didFinishEvent(SimpleDialogPromptViewController viewControll } viewController.DismissModalViewController(null, false); } + */ } } diff --git a/BeatSaberTweaks/Tweaks/InGameClock.cs b/BeatSaberTweaks/Tweaks/InGameClock.cs index 07139ca..aa3e888 100644 --- a/BeatSaberTweaks/Tweaks/InGameClock.cs +++ b/BeatSaberTweaks/Tweaks/InGameClock.cs @@ -27,6 +27,7 @@ public class InGameClock : MonoBehaviour public static void OnLoad(Transform parent) { if (Instance != null) return; + Plugin.Log("Creating InGameClock.", Plugin.LogLevel.DebugOnly); new GameObject("In Game Time").AddComponent().transform.parent = parent; } @@ -34,6 +35,7 @@ public void Awake() { if (Instance == null) { + Plugin.Log("InGameClock awake.", Plugin.LogLevel.DebugOnly); Instance = this; SceneManager.activeSceneChanged += SceneManagerOnActiveSceneChanged; DontDestroyOnLoad(gameObject); @@ -49,10 +51,12 @@ public void Awake() public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { + Plugin.Log("InGameClock SceneManagerOnActiveSceneChanged: " + arg0.name + " " + scene.name, Plugin.LogLevel.DebugOnly); try { - if (SettingsUI.isMenuScene(scene) && ClockCanvas == null) + if (SceneUtils.isMenuScene(scene) && ClockCanvas == null) { + Plugin.Log("Creating the clock object... ", Plugin.LogLevel.DebugOnly); ClockCanvas = new GameObject(); DontDestroyOnLoad(ClockCanvas); ClockCanvas.AddComponent(); @@ -81,7 +85,7 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) } catch (Exception e) { - Console.WriteLine("Tweaks (Clock) done fucked up: " + e); + Plugin.Log("InGameClock error: " + e, Plugin.LogLevel.DebugOnly); } } @@ -102,6 +106,7 @@ public void Update() public static void UpdateClock() { + Plugin.Log("InGameClock UpdateClock function called.", Plugin.LogLevel.DebugOnly); string time; if (Settings.Use24hrClock) { diff --git a/BeatSaberTweaks/Tweaks/MenuBGVolume.cs b/BeatSaberTweaks/Tweaks/MenuBGVolume.cs index 5e451e7..510eba9 100644 --- a/BeatSaberTweaks/Tweaks/MenuBGVolume.cs +++ b/BeatSaberTweaks/Tweaks/MenuBGVolume.cs @@ -40,19 +40,22 @@ public void Awake() public static void UpdateBGVolume() { - if (player != null && SettingsUI.isMenuScene(SceneManager.GetActiveScene())) + Plugin.Log("Updating BG volume", Plugin.LogLevel.DebugOnly); + if (player != null && SceneUtils.isMenuScene(SceneManager.GetActiveScene())) { float newVolume = normalVolume * Settings.MenuBGVolume; ReflectionUtil.SetPrivateField(player, "_ambientVolumeScale", newVolume); player.CrossfadeTo(ReflectionUtil.GetPrivateField(player, "_defaultAudioClip"), 0f, -1f, newVolume); + //player.CrossfadeToDefault(); } } private void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { + Plugin.Log("MenuBGVolume SceneManagerOnActiveSceneChanged", Plugin.LogLevel.DebugOnly); try { - if (SettingsUI.isMenuScene(scene)) + if (SceneUtils.isMenuScene(scene)) { player = Resources.FindObjectsOfTypeAll().FirstOrDefault(); if (normalVolume == 0) diff --git a/BeatSaberTweaks/Tweaks/MoveEnergyBar.cs b/BeatSaberTweaks/Tweaks/MoveEnergyBar.cs index a300bd6..e32f90e 100644 --- a/BeatSaberTweaks/Tweaks/MoveEnergyBar.cs +++ b/BeatSaberTweaks/Tweaks/MoveEnergyBar.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -34,13 +35,9 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { try { - if (Settings.MoveEnergyBar && SettingsUI.isGameScene(scene)) + if (Settings.MoveEnergyBar && SceneUtils.isGameScene(scene)) { - var loader = SceneEvents.GetSceneLoader(); - if (loader != null) - { - loader.loadingDidFinishEvent += LoadingDidFinishEvent; - } + StartCoroutine(WaitForLoad()); } } catch (Exception e) @@ -49,6 +46,27 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) } } + private IEnumerator WaitForLoad() + { + bool loaded = false; + while (!loaded) + { + var resultsViewController = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + + if (resultsViewController == null) + { + Plugin.Log("resultsViewController is null!", Plugin.LogLevel.DebugOnly); + yield return new WaitForSeconds(0.01f); + } + else + { + Plugin.Log("Found resultsViewController!", Plugin.LogLevel.DebugOnly); + loaded = true; + } + } + LoadingDidFinishEvent(); + } + private void LoadingDidFinishEvent() { var energyPanel = Resources.FindObjectsOfTypeAll().FirstOrDefault(); diff --git a/BeatSaberTweaks/Tweaks/NoteHitVolume.cs b/BeatSaberTweaks/Tweaks/NoteHitVolume.cs index 258c351..d5ae52b 100644 --- a/BeatSaberTweaks/Tweaks/NoteHitVolume.cs +++ b/BeatSaberTweaks/Tweaks/NoteHitVolume.cs @@ -8,6 +8,7 @@ using UnityEngine.UI; using UnityEngine.SceneManagement; using Object = UnityEngine.Object; +using System.Collections; namespace BeatSaberTweaks { @@ -45,13 +46,9 @@ private void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { try { - if (SettingsUI.isGameScene(scene)) + if (SceneUtils.isGameScene(scene)) { - var loader = SceneEvents.GetSceneLoader(); - if (loader != null) - { - loader.loadingDidFinishEvent += LoadingDidFinishEvent; - } + StartCoroutine(WaitForLoad()); } } catch (Exception e) @@ -60,6 +57,27 @@ private void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) } } + private IEnumerator WaitForLoad() + { + bool loaded = false; + while (!loaded) + { + var resultsViewController = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + + if (resultsViewController == null) + { + Plugin.Log("resultsViewController is null!", Plugin.LogLevel.DebugOnly); + yield return new WaitForSeconds(0.01f); + } + else + { + Plugin.Log("Found resultsViewController!", Plugin.LogLevel.DebugOnly); + loaded = true; + } + } + LoadingDidFinishEvent(); + } + private void LoadingDidFinishEvent() { try diff --git a/BeatSaberTweaks/Tweaks/OneColour.cs b/BeatSaberTweaks/Tweaks/OneColour.cs index 463cf12..d6f7299 100644 --- a/BeatSaberTweaks/Tweaks/OneColour.cs +++ b/BeatSaberTweaks/Tweaks/OneColour.cs @@ -16,6 +16,7 @@ class OneColour : MonoBehaviour public static void OnLoad(Transform parent) { + Plugin.Log("One Color Load", Plugin.LogLevel.Info); if (Instance != null) return; new GameObject("One Colour").AddComponent().transform.parent = parent; } @@ -38,22 +39,18 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { try { - //if (SettingsUI.isMenuScene(scene)) - // { - // if (model == null) - // { - // model = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - // rumble = model.controllersRumbleEnabled; - // } - // model.controllersRumbleEnabled = rumble; - // } - if (SettingsUI.isGameScene(scene) && Settings.OneColour && TweakManager.IsPartyMode()) - { - var loader = SceneEvents.GetSceneLoader(); - if (loader != null) + if (scene.name == "Menu") { - loader.loadingDidFinishEvent += LoadingDidFinishEvent; + if (model == null) + { + model = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + rumble = model.controllersRumbleEnabled; + } + model.controllersRumbleEnabled = rumble; } + if (SceneUtils.isGameScene(scene) && Settings.OneColour && TweakManager.IsPartyMode()) + { + StartCoroutine(WaitForLoad()); } } catch (Exception e) @@ -62,29 +59,40 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) } } + private IEnumerator WaitForLoad() + { + bool loaded = false; + while (!loaded) + { + var resultsViewController = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + + if (resultsViewController == null) + { + Plugin.Log("resultsViewController is null!", Plugin.LogLevel.DebugOnly); + yield return new WaitForSeconds(0.01f); + } + else + { + Plugin.Log("Found resultsViewController!", Plugin.LogLevel.DebugOnly); + loaded = true; + } + } + yield return new WaitForSeconds(0.1f); + LoadingDidFinishEvent(); + } + private void LoadingDidFinishEvent() { try { - PlayerController _playerController = FindObjectOfType(); - Saber left = _playerController.leftSaber; - Saber right = _playerController.rightSaber; + Plugin.Log("One Color Activation Attempt", Plugin.LogLevel.Info); + PlayerController _playerController = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + var leftSaberType = _playerController.leftSaber.GetPrivateField("_saberType"); + leftSaberType.SetPrivateField("_saberType", Saber.SaberType.SaberB); + rumble = model.controllersRumbleEnabled; + model.controllersRumbleEnabled = false; - //rumble = model.controllersRumbleEnabled; - //model.controllersRumbleEnabled = false; - if (left != null && right != null) - { - GameObject gameObject = Instantiate(right.gameObject); - Saber component = gameObject.GetComponent(); - gameObject.transform.parent = left.transform.parent; - gameObject.transform.localPosition = Vector3.zero; - gameObject.transform.localRotation = Quaternion.identity; - left.gameObject.SetActive(false); - ReflectionUtil.SetPrivateField(_playerController, "_leftSaber", component); - //var type = ReflectionUtil.GetPrivateField(right, "_saberType"); - //ReflectionUtil.SetPrivateField(component, "_saberType", type); - } } catch (Exception e) { diff --git a/BeatSaberTweaks/Tweaks/ScoreMover.cs b/BeatSaberTweaks/Tweaks/ScoreMover.cs index 46ac456..a7dbc50 100644 --- a/BeatSaberTweaks/Tweaks/ScoreMover.cs +++ b/BeatSaberTweaks/Tweaks/ScoreMover.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -34,13 +35,9 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { try { - if (Settings.MoveScore && SettingsUI.isGameScene(scene)) + if (Settings.MoveScore && SceneUtils.isGameScene(scene)) { - var loader = SceneEvents.GetSceneLoader(); - if (loader != null) - { - loader.loadingDidFinishEvent += LoadingDidFinishEvent; - } + StartCoroutine(WaitForLoad()); } } catch (Exception e) @@ -49,6 +46,27 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) } } + private IEnumerator WaitForLoad() + { + bool loaded = false; + while (!loaded) + { + var resultsViewController = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + + if (resultsViewController == null) + { + Plugin.Log("resultsViewController is null!", Plugin.LogLevel.DebugOnly); + yield return new WaitForSeconds(0.01f); + } + else + { + Plugin.Log("Found resultsViewController!", Plugin.LogLevel.DebugOnly); + loaded = true; + } + } + LoadingDidFinishEvent(); + } + private void LoadingDidFinishEvent() { var scorePanel = Resources.FindObjectsOfTypeAll().FirstOrDefault(); diff --git a/BeatSaberTweaks/Tweaks/SongDataModifer.cs b/BeatSaberTweaks/Tweaks/SongDataModifer.cs index c46186b..3c9d2dc 100644 --- a/BeatSaberTweaks/Tweaks/SongDataModifer.cs +++ b/BeatSaberTweaks/Tweaks/SongDataModifer.cs @@ -32,9 +32,13 @@ public void Awake() Instance = this; DontDestroyOnLoad(gameObject); + /* + * TODO + * Figure out how any of this works MethodInfo original = typeof(BeatDataTransformHelper).GetMethod("CreateTransformedBeatmapData", BindingFlags.Public | BindingFlags.Static); MethodInfo modified = typeof(SongDataModifer).GetMethod(nameof(CreateTransformedBeatmapData), BindingFlags.Public | BindingFlags.Static); songDataRedirect = new Redirection(original, modified, true); + */ SceneManager.activeSceneChanged += SceneManagerOnActiveSceneChanged; } @@ -48,16 +52,15 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { try { - if (SettingsUI.isGameScene(scene)) + if (SceneUtils.isGameScene(scene)) { - if (TweakManager.IsPartyMode() && Settings.OverrideJumpSpeed) + if (TweakManager.IsPartyMode() && (Settings.OverrideJumpSpeed || Settings.OneColour || Settings.NoArrows || Settings.RemoveBombs)) { - var loader = SceneEvents.GetSceneLoader(); - if (loader != null) - { - loader.loadingDidFinishEvent += LoadingDidFinishEvent; - } + Plugin.Log("Party Mode Active", Plugin.LogLevel.Info); + StartCoroutine(WaitForLoad()); } + else + Plugin.Log("Party Mode Not Active", Plugin.LogLevel.Info); } } catch (Exception e) @@ -66,15 +69,38 @@ public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) } } + private IEnumerator WaitForLoad() + { + bool loaded = false; + while (!loaded) + { + var resultsViewController = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + + if (resultsViewController == null) + { + Plugin.Log("resultsViewController is null!", Plugin.LogLevel.DebugOnly); + yield return new WaitForSeconds(0.01f); + } + else + { + Plugin.Log("Found resultsViewController!", Plugin.LogLevel.DebugOnly); + loaded = true; + } + } + LoadingDidFinishEvent(); + } + private void LoadingDidFinishEvent() { StartCoroutine(SetNJS()); + StartCoroutine(CreateTransformedBeatmapData(Plugin._gameplayMode)); } IEnumerator SetNJS() { - var _mainGameSceneSetupData = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - var _currentLevelPlaying = _mainGameSceneSetupData.difficultyLevel; + + var _levelData = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + var _currentLevelPlaying = _levelData.difficultyBeatmap; var ONJS = _currentLevelPlaying.GetPrivateField("_noteJumpMovementSpeed"); @@ -86,7 +112,9 @@ IEnumerator SetNJS() { _currentLevelPlaying.SetPrivateField("_noteJumpMovementSpeed", Settings.NoteJumpSpeed); } + yield return new WaitForSeconds(0.5f); + _currentLevelPlaying.SetPrivateField("_noteJumpMovementSpeed", ONJS); } @@ -95,94 +123,65 @@ static bool ShouldApplyModifers() return TweakManager.IsPartyMode() && (Settings.RemoveBombs || Settings.OneColour || Settings.NoArrows); } - public static BeatmapData CreateTransformedBeatmapData(BeatmapData beatmapData, GameplayOptions gameplayOptions, GameplayMode gameplayMode) + + + public static IEnumerator CreateTransformedBeatmapData(string gameplayMode) { - BeatmapData newData = (BeatmapData)songDataRedirect.InvokeOriginal(null, beatmapData, gameplayOptions, gameplayMode); - + Plugin.Log("Waiting to change beatmap", Plugin.LogLevel.Info); + yield return new WaitForSeconds(0.2f); if (ShouldApplyModifers()) { + Plugin.Log("Attempting to change beatmap", Plugin.LogLevel.Info); //Console.WriteLine("Applying BeatMap modifiers."); - newData = ApplyModifiers(newData); + ApplyModifiers(); } - return newData; + } + - public static BeatmapData ApplyModifiers(BeatmapData beatmapData) + public static void ApplyModifiers() { - BeatmapLineData[] beatmapLinesData = beatmapData.beatmapLinesData; - int[] array = new int[beatmapLinesData.Length]; - for (int i = 0; i < array.Length; i++) - { - array[i] = 0; - } - int num = 0; - for (int j = 0; j < beatmapLinesData.Length; j++) - { - num += beatmapLinesData[j].beatmapObjectsData.Length; - } - List list = new List(num); - bool flag; - do - { - flag = false; - float num2 = 999999f; - int num3 = 0; - for (int k = 0; k < beatmapLinesData.Length; k++) + Plugin.Log("Modifying BeatMap Data", Plugin.LogLevel.Info); + GameplayCoreSceneSetup gameplayCoreSceneSetup = Resources.FindObjectsOfTypeAll().First(); + BeatmapDataModel dataModel = gameplayCoreSceneSetup.GetPrivateField("_beatmapDataModel"); + BeatmapData beatmapData = dataModel.beatmapData; + BeatmapObjectData[] objects; + NoteData noteData; + foreach (BeatmapLineData line in beatmapData.beatmapLinesData) + { + objects = line.beatmapObjectsData; + foreach (BeatmapObjectData beatmapObject in objects) { - BeatmapObjectData[] beatmapObjectsData = beatmapLinesData[k].beatmapObjectsData; - int num4 = array[k]; - if (num4 < beatmapObjectsData.Length) + if (beatmapObject.beatmapObjectType == BeatmapObjectType.Note) { - flag = true; - BeatmapObjectData beatmapObjectData = beatmapObjectsData[num4]; - float time = beatmapObjectData.time; - if (time < num2) + noteData = beatmapObject as NoteData; + + if (noteData != null) { - num2 = time; - num3 = k; + if (Settings.NoArrows) + { + noteData.SetNoteToAnyCutDirection(); + } + + if (Settings.OneColour && noteData.noteType == NoteType.NoteA) + { + noteData.SwitchNoteType(); + } + if(noteData.noteType == NoteType.Bomb && Settings.RemoveBombs) + { + //Admittedly ghetto way of removing bombs but should be amusing at the very least + noteData.MirrorLineIndex(10); + } } } + + + + + } - if (flag) - { - var note = beatmapLinesData[num3].beatmapObjectsData[array[num3]].GetCopy(); - if (!(Settings.RemoveBombs && IsBomb(note))) - { - list.Add(beatmapLinesData[num3].beatmapObjectsData[array[num3]].GetCopy()); - } - array[num3]++; - } - } - while (flag); - ModifyObjects(list, beatmapData.beatmapLinesData.Length); - int[] array2 = new int[beatmapLinesData.Length]; - for (int l = 0; l < list.Count; l++) - { - BeatmapObjectData beatmapObjectData2 = list[l]; - array2[beatmapObjectData2.lineIndex]++; - } - BeatmapLineData[] array3 = new BeatmapLineData[beatmapLinesData.Length]; - for (int m = 0; m < beatmapLinesData.Length; m++) - { - array3[m] = new BeatmapLineData(); - array3[m].beatmapObjectsData = new BeatmapObjectData[array2[m]]; - array[m] = 0; - } - for (int n = 0; n < list.Count; n++) - { - BeatmapObjectData beatmapObjectData3 = list[n]; - int lineIndex = beatmapObjectData3.lineIndex; - array3[lineIndex].beatmapObjectsData[array[lineIndex]] = beatmapObjectData3; - array[lineIndex]++; - } - BeatmapEventData[] array4 = new BeatmapEventData[beatmapData.beatmapEventData.Length]; - for (int num5 = 0; num5 < beatmapData.beatmapEventData.Length; num5++) - { - BeatmapEventData beatmapEventData = beatmapData.beatmapEventData[num5]; - array4[num5] = beatmapEventData.GetCopy(); } - return new BeatmapData(array3, array4); //return new SongData(songData.BeatsPerMinute, Settings.OverrideJumpSpeed ? Settings.NoteJumpSpeed : songData.NoteJumpSpeed, array3, array4); } diff --git a/BeatSaberTweaks/Utilites/SceneEvents.cs b/BeatSaberTweaks/Utilites/SceneEvents.cs index d82f0d0..5c2a6a8 100644 --- a/BeatSaberTweaks/Utilites/SceneEvents.cs +++ b/BeatSaberTweaks/Utilites/SceneEvents.cs @@ -1,36 +1,43 @@ -using System; -using System.Collections; -using System.Collections.Generic; +using System.Collections; using System.Linq; using UnityEngine; using UnityEngine.SceneManagement; -using UnityEngine.UI; -using Object = UnityEngine.Object; -using VRUI; -using VRUIControls; -using TMPro; -using IllusionPlugin; + + +// This class doesn't work. +// Cool idea though namespace BeatSaberTweaks { - static class SceneEvents + public class SceneEvents : MonoBehaviour { - static AsyncScenesLoader loader = null; - public static AsyncScenesLoader GetSceneLoader() + private bool loaded = false; + + public delegate void MyFunction(); + + public void WaitThenRunFunction(MyFunction functionToRun) + { + StartCoroutine(WaitForLoad(functionToRun)); + } + + private IEnumerator WaitForLoad(MyFunction functionToRun) { - if (SceneManager.GetActiveScene().name == "StandardLevelLoader") + while (!loaded) { - if (loader == null) + var resultsViewController = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + + if (resultsViewController == null) + { + Plugin.Log("resultsViewController is null!", Plugin.LogLevel.DebugOnly); + yield return new WaitForSeconds(0.01f); + } + else { - loader = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - if (loader != null) - { - //Console.WriteLine("Found Scene Loader"); - } + Plugin.Log("Loaded the energy bar mover", Plugin.LogLevel.DebugOnly); + loaded = true; } - return loader; } - return null; + functionToRun(); } } -} +} \ No newline at end of file diff --git a/BeatSaberTweaks/Utilites/SceneLoadHandler.cs b/BeatSaberTweaks/Utilites/SceneLoadHandler.cs new file mode 100644 index 0000000..178de2a --- /dev/null +++ b/BeatSaberTweaks/Utilites/SceneLoadHandler.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeatSaberTweaks.Utilites +{ + class SceneLoadHandler + { + } +} diff --git a/BeatSaberTweaks/Utilites/SceneUtils.cs b/BeatSaberTweaks/Utilites/SceneUtils.cs new file mode 100644 index 0000000..3b4151a --- /dev/null +++ b/BeatSaberTweaks/Utilites/SceneUtils.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine.SceneManagement; + +namespace BeatSaberTweaks +{ + class SceneUtils + { + public static bool isMenuScene(Scene scene) + { + return checkSceneByName(scene, "Menu"); + } + + public static bool isGameScene(Scene scene) + { + return checkSceneByName(scene, "GameCore"); + } + + private static bool checkSceneByName(Scene scene, String sceneName) + { + try + { + return (scene.name == sceneName); + } + catch (Exception e) + { + Plugin.Log("Error getting " + sceneName + " scene:" + e, Plugin.LogLevel.Error); + } + return false; + } + } +} diff --git a/BeatSaberTweaks/Utilites/SettingsUI.cs b/BeatSaberTweaks/Utilites/SettingsUI.cs deleted file mode 100644 index 63bd047..0000000 --- a/BeatSaberTweaks/Utilites/SettingsUI.cs +++ /dev/null @@ -1,386 +0,0 @@ -#if !NewUI -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using UnityEngine.SceneManagement; -using UnityEngine.UI; -using Object = UnityEngine.Object; -using VRUI; -using VRUIControls; -using TMPro; -using IllusionPlugin; -using HMUI; - -namespace BeatSaberTweaks -{ - public class ListViewController : ListSettingsController - { - public delegate float GetFloat(); - public event GetFloat GetValue; - - public delegate void SetFloat(float value); - public event SetFloat SetValue; - - public delegate string StringForValue(float value); - public event StringForValue FormatValue; - - protected float[] values; - - public void SetValues(float[] values) - { - this.values = values; - } - - protected override void GetInitValues(out int idx, out int numberOfElements) - { - numberOfElements = values.Length; - float value = 0; - if (GetValue != null) - { - value = GetValue(); - } - - idx = numberOfElements - 1; - for (int j = 0; j < values.Length; j++) - { - if (value == values[j]) - { - idx = j; - return; - } - } - } - - protected override void ApplyValue(int idx) - { - if (SetValue != null) - { - SetValue(values[idx]); - } - } - - protected override string TextForValue(int idx) - { - string text = "?"; - if (FormatValue != null) - { - text = FormatValue(values[idx]); - } - return text; - } - } - - public class BoolViewController : SwitchSettingsController - { - public delegate bool GetBool(); - public event GetBool GetValue; - - public delegate void SetBool(bool value); - public event SetBool SetValue; - - protected override bool GetInitValue() - { - bool value = false; - if (GetValue != null) - { - value = GetValue(); - } - return value; - } - - protected override void ApplyValue(bool value) - { - if (SetValue != null) - { - SetValue(value); - } - } - - protected override string TextForValue(bool value) - { - return (value) ? "ON" : "OFF"; - } - } - - public class SubMenu - { - public Transform transform; - - public SubMenu(Transform transform) - { - this.transform = transform; - } - - public BoolViewController AddBool(string name) - { - return AddToggleSetting(name); - } - - public ListViewController AddList(string name, float[] values) - { - var view = AddListSetting(name); - view.SetValues(values); - return view; - } - - public T AddListSetting(string name) where T : ListSettingsController - { - var volumeSettings = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform); - newSettingsObject.name = name; - - VolumeSettingsController volume = newSettingsObject.GetComponent(); - T newListSettingsController = (T)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(T), newSettingsObject); - MonoBehaviour.DestroyImmediate(volume); - - newSettingsObject.GetComponentInChildren().text = name; - - return newListSettingsController; - } - - public T AddToggleSetting(string name) where T : SwitchSettingsController - { - var volumeSettings = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform); - newSettingsObject.name = name; - - WindowModeSettingsController volume = newSettingsObject.GetComponent(); - T newToggleSettingsController = (T)ReflectionUtil.CopyComponent(volume, typeof(SwitchSettingsController), typeof(T), newSettingsObject); - MonoBehaviour.DestroyImmediate(volume); - - newSettingsObject.GetComponentInChildren().text = name; - - return newToggleSettingsController; - } - } - - public class SettingsUI : MonoBehaviour - { - public static SettingsUI Instance = null; - static bool ready = false; - public static bool Ready - { - get => ready; - } - - static MainMenuViewController _mainMenuViewController = null; - static SettingsNavigationController settingsMenu = null; - static MainSettingsMenuViewController mainSettingsMenu = null; - static MainSettingsTableView _mainSettingsTableView = null; - static TableView subMenuTableView = null; - static MainSettingsTableCell tableCell = null; - static TableViewHelper subMenuTableViewHelper; - - static Transform othersSubmenu = null; - - static SimpleDialogPromptViewController prompt = null; - - static Button _pageUpButton = null; - static Button _pageDownButton = null; - static Vector2 buttonOffset = new Vector2(24, 0); - - - public static void OnLoad() - { - if (Instance != null) return; - new GameObject("SettingsUI").AddComponent(); - } - - public static bool isMenuScene(Scene scene) - { - return (scene.name == "Menu"); - } - - public static bool isGameScene(Scene scene) - { - //return scene.name.Contains("Environment"); - return (scene.name == "StandardLevelLoader"); - } - - public void Awake() - { - if (Instance == null) - { - Instance = this; - SceneManager.activeSceneChanged += SceneManagerOnActiveSceneChanged; - DontDestroyOnLoad(gameObject); - } - else - { - Destroy(this); - } - } - - public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) - { - try - { - if (isMenuScene(scene)) - { - SetupUI(); - - //var testSub = CreateSubMenu("Test 1"); - //var testSub2 = CreateSubMenu("Test 2"); - //var testSub3 = CreateSubMenu("Test 3"); - //var testSub4 = CreateSubMenu("Test 4"); - //var testSub5 = CreateSubMenu("Test 5"); - //var testSub6 = CreateSubMenu("Test 6"); - } - } - catch (Exception e) - { - Console.WriteLine("SettingsUI done fucked up: " + e); - } - } - - private static void SetupUI() - { - if (mainSettingsMenu == null) - { - ready = false; - } - - if (!Ready) - { - try - { - var _menuMasterViewController = Resources.FindObjectsOfTypeAll().First(); - prompt = ReflectionUtil.GetPrivateField(_menuMasterViewController, "_simpleDialogPromptViewController"); - - _mainMenuViewController = Resources.FindObjectsOfTypeAll().First(); - settingsMenu = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - mainSettingsMenu = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - _mainSettingsTableView = mainSettingsMenu.GetPrivateField("_mainSettingsTableView"); - subMenuTableView = _mainSettingsTableView.GetComponentInChildren(); - subMenuTableViewHelper = subMenuTableView.gameObject.AddComponent(); - othersSubmenu = settingsMenu.transform.Find("Others"); - - //var buttons = settingsMenu.transform.Find("Buttons"); - //RectTransform okButton = (RectTransform)buttons.Find("OkButton"); //{x: -17, y: 6} - //RectTransform CancelButton = (RectTransform)buttons.Find("CancelButton"); // {x: 0, y: 6} - //RectTransform ApplyButton = (RectTransform)buttons.Find("ApplyButton"); // {x: 17, y: 6} - - //okButton.anchoredPosition += buttonOffset; - //CancelButton.anchoredPosition += buttonOffset; - //ApplyButton.anchoredPosition += buttonOffset; - - if (_mainSettingsTableView != null) - { - AddPageButtons(); - } - - if (tableCell == null) - { - tableCell = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - // Get a refence to the Settings Table cell text in case we want to change font size, etc - var text = tableCell.GetPrivateField("_settingsSubMenuText"); - } - - ready = true; - } - catch (Exception e) - { - Console.WriteLine("Beat Saver UI: Oops - " + e.Message); - } - } - } - - static void AddPageButtons() - { - RectTransform viewport = _mainSettingsTableView.GetComponentsInChildren().First(x => x.name == "Viewport"); - viewport.anchorMin = new Vector2(0f, 0.5f); - viewport.anchorMax = new Vector2(1f, 0.5f); - viewport.sizeDelta = new Vector2(0f, 48f); - viewport.anchoredPosition = new Vector2(0f, 0f); - - if (_pageUpButton == null) - { - _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll