Files
BarotraumaModServer/LocalMods/More Level Content/CSharp/Client/Config/ConfigManager.cs
2026-06-09 00:42:10 +03:00

119 lines
4.3 KiBLFS
C#
Executable File

using Barotrauma.MoreLevelContent.Client.UI;
using Barotrauma.MoreLevelContent.Shared.Utils;
using Microsoft.Xna.Framework;
using MoreLevelContent.Shared;
using Barotrauma.MoreLevelContent.Shared.Config;
using MoreLevelContent;
using Barotrauma.Networking;
using MoreLevelContent.Networking;
namespace Barotrauma.MoreLevelContent.Config
{
/// <summary>
/// Client
/// </summary>
partial class ConfigManager : Singleton<ConfigManager>
{
public static bool ShouldDisplayPatchNotes = false;
private void SetupClient()
{
CommandUtils.AddCommand(
"mlc_config",
"Toggle the display of the config editor",
ToggleGUI);
// Exit if we're in an editor
if (Screen.Selected.IsEditor) return;
if (GameMain.IsSingleplayer) return; // We don't need to do any of this if we're in singleplayer
NetUtil.Register(NetEvent.CONFIG_WRITE_CLIENT, ClientRead);
if (!GameMain.Client.IsServerOwner) RequestConfig();
else ClientWrite();
}
public void SetConfig(MLCConfig config)
{
this.Config = config;
Log.Debug("[CLIENT] Config Updated");
Log.Verbose(Config.ToString());
if (!GameMain.IsSingleplayer) UpdateConfig();
SaveConfig();
}
private void RequestConfig()
{
IWriteMessage outMsg = NetUtil.CreateNetMsg(NetEvent.CONFIG_REQUEST);
outMsg.WriteString(Main.Version);
GameMain.LuaCs.Networking.Send(outMsg);
Log.Verbose("Requested config from server...");
}
private void ClientWrite()
{
// Always allow the server owner to write
if (!GameMain.Client.HasPermission(ClientPermissions.ManageSettings) && !GameMain.Client.IsServerOwner)
{
Log.Error("No Perms!");
return;
}
IWriteMessage outMsg = NetUtil.CreateNetMsg(NetEvent.CONFIG_WRITE_SERVER);
outMsg.WriteString(Main.Version);
WriteConfig(ref outMsg);
GameMain.LuaCs.Networking.Send(outMsg);
Log.Debug("Sent config packet to server!");
}
private void ClientRead(object[] args)
{
Log.Debug("Got config packet!");
IReadMessage inMsg = (IReadMessage)args[0];
ReadNetConfig(ref inMsg);
}
private void UpdateConfig()
{
if (!GameMain.Client.HasPermission(ClientPermissions.ManageSettings)) return;
ClientWrite();
}
private void DisplayPatchNotes(bool force = false)
{
// REMEMBER TO CHANGE THIS BACK
if (Config.Version != Main.Version || force || Main.IsNightly)
{
ShouldDisplayPatchNotes = true;
}
}
public bool SettingsOpen
{
get => _settingsOpen;
set
{
if (value == _settingsOpen) { return; }
if (value)
{
_settingsMenu = new GUIFrame(new RectTransform(Vector2.One, Screen.Selected.Frame.RectTransform, Anchor.Center), style: null);
_ = new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, _settingsMenu.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker");
var settingsMenuInner = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.8f), _settingsMenu.RectTransform, Anchor.Center, scaleBasis: ScaleBasis.Smallest) { MinSize = new Point(640, 480) });
_ = ConfigMenu.Create(settingsMenuInner.RectTransform);
Log.Verbose("Opened Settings");
}
else
{
ConfigMenu.Instance?.Close();
_settingsMenu.Parent.RemoveChild(_settingsMenu);
_settingsMenu = null;
Log.Verbose("Closed Settings");
}
_settingsOpen = value;
}
}
private static bool _settingsOpen;
private static GUIFrame _settingsMenu;
private void ToggleGUI(object[] args) => SettingsOpen = !SettingsOpen;
}
}