using BepInEx; using CoreNet.Config; using GB.Config; using GB.Core; using GB.Game; using GB.Platform.Lobby; using HarmonyLib; using UnityEngine; #pragma warning disable IDE0051 // Private member is unused namespace GBSU.Addons; public class GBSUGui : MonoBehaviour { private bool menu_shown; //private string _currentMap; public Rect gmenu = new(Screen.width / 2, 0, 385f, 690f); readonly IInputSystem inputSystem = UnityInput.Current; string serverip = null; int serverport = 0; string currentmap; int vsync_switch; bool hosting = false; private void Start() { if (CommandLineParser.Instance.KeyExists("-ip")) { serverip = CommandLineParser.Instance.GetValueForKey("-ip", true); } if (CommandLineParser.Instance.KeyExists("-port")) { int.TryParse(CommandLineParser.Instance.GetValueForKey("-port", true), out serverport); } vsync_switch = QualitySettings.vSyncCount; } private void Update() { if (inputSystem.GetKeyDown(KeyCode.RightShift)) { //Plugin.Log.LogInfo("Toggling GBSU menu..."); ToggleMenu(); } currentmap = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name; } private void ToggleMenu() { if (menu_shown == true) { menu_shown = false; //Plugin.Log.LogInfo("GBSU menu hidden"); } else { menu_shown = true; //Plugin.Log.LogInfo("GBSU menu shown"); } } private void ShowOurWindow(int window) { GUI.skin.label.alignment = TextAnchor.UpperLeft; GUILayout.Label($@"==Guide== Set CLI arguments: -ip, -port, -servername, -serverpassword [Hosting] 1. Create a config in Gang Beasts_Data/Config/Rotation/config.json 2. Press the 'Host' button while in the Main Menu [Joining] 1. Go to Online 2. Press the 'Join' button"); if (GUI.Button(new Rect(320f, 10f, 55f, 30f), "KILL")) { Application.Quit(0); } if (serverip != null && serverport != default) { if (GUI.Button(new Rect(20f, 260f, 170f, 30f), "Host")) { if (LobbyManager.Instance.LobbyStates.SelfState == LobbyState.Game.Menu) { hosting = true; AudioListener.volume = 0; // mute game audio Plugin.AddServerComp(); // add custom GBSU server component RotationConfig gameConfig = GBConfigLoader.LoadRotationConfig("config.json", true); // load rotation config from Config/Rotation/config.json ServerConfig serverConfig = NetConfigLoader.LoadServerConfig(); // load default server config, because it can be overridden by args like -ip and -port MonoSingleton.Instance.UNetManager.LaunchServer(serverConfig); // launch the server with the server config MonoSingleton.Instance.UNetManager.GetComponent().ChangeRotationConfig(gameConfig, 0); // set server's rotationconfig } } if (GUI.Button(new Rect(195f, 260f, 170f, 30f), "Join")) { if (LobbyManager.Instance.LobbyStates.SelfState == LobbyState.Game.Online) { if (!hosting && serverip != null && serverport != 0) { LobbyManager.Instance.LobbyStates.IP = serverip; LobbyManager.Instance.LobbyStates.Port = serverport; LobbyManager.Instance.LobbyStates.CurrentState = LobbyState.State.Ready | LobbyState.State.InGame; LobbyManager.Instance.LocalBeasts.SetupNetMemberContext(true); MonoSingleton.Instance.UNetManager.LaunchClient(serverip, serverport); } } } } if (GUI.Button(new Rect(20f, 295f, 170f, 30f), "Cap FPS to 60")) { Application.targetFrameRate = 60; } if (GUI.Button(new Rect(195f, 295f, 170f, 30f), "Cap FPS to 240")) { Application.targetFrameRate = 240; } if (GUI.Button(new Rect(20f, 330f, 170f, 30f), "Toggle VSync")) { if (vsync_switch == 0) { vsync_switch = 1; } else { vsync_switch = 0; } QualitySettings.vSyncCount = vsync_switch; } GUI.Label(new Rect(20f, 365f, 365f, 400f), $@" Current map: {currentmap} Lobby State: {LobbyManager.Instance.LobbyStates.SelfState} VSync: {QualitySettings.vSyncCount} Target FPS: {Application.targetFrameRate} {UpdateScoreDisplay()} Made with <3 by anavoi at Gaboule Community Free and open-source software under GPLv3. Our source code is available at git.gaboule.com/Gaboule/GBSU Please refer to the documentation for more information."); GUI.DragWindow(new Rect(0, 0, 10000, 10000)); } private string UpdateScoreDisplay() { if (hosting) { string scoreString = "Score:\n"; foreach (var pair in Plugin.GameScore) { scoreString += $"{pair.Key}: {pair.Value}\n"; } return scoreString; } return null; } public void OnGUI() { if (menu_shown) { gmenu = GUILayout.Window(121, gmenu, ShowOurWindow, $"{Plugin.PluginName} [{Plugin.PluginVersion}]"); } } }