using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using BetterUI.Patches;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("BetterUI")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BetterUI")]
[assembly: AssemblyCopyright("Copyright © LessonLethal 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("de27b4d1-820d-4505-a953-6001420281e4")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace BetterUI
{
[BepInPlugin("LessonLethal.BetterUI", "BetterUI", "1.1.0")]
public class BetterUIBase : BaseUnityPlugin
{
internal const string Name = "BetterUI";
internal const string GUID = "LessonLethal.BetterUI";
internal const string Version = "1.1.0";
private readonly Harmony harmony = new Harmony("LessonLethal.BetterUI");
private static BetterUIBase Instance;
private static ManualLogSource mls;
public void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
ConfigCtrl.InitConfig(((BaseUnityPlugin)this).Config);
CreateCustomLogger();
Log("BetterUI: v1.1.0 HAS AWAKENED FROM A DEEP SLEEP RAWR!");
if (ConfigCtrl.fpsEnabled.Value)
{
harmony.PatchAll(typeof(FpsCtrl));
}
if (ConfigCtrl.hudEnabled.Value)
{
harmony.PatchAll(typeof(HudCtrl));
}
if (ConfigCtrl.clockEnabled.Value)
{
harmony.PatchAll(typeof(ClockCtrl));
}
if (ConfigCtrl.autoFadeChat.Value)
{
harmony.PatchAll(typeof(ChatCtrl));
}
if (ConfigCtrl.realTimeClock.Value)
{
harmony.PatchAll(typeof(TimeCtrl));
}
}
private void OnGUI()
{
if (ConfigCtrl.fpsEnabled.Value)
{
FpsCtrl.FpsProcessor();
}
}
private void Update()
{
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
if (ConfigCtrl.fpsEnabled.Value)
{
FpsCtrl.FpsProcessorRelay();
}
if (ConfigCtrl.frameRateOverride.Value)
{
if (Application.targetFrameRate != 500)
{
Application.targetFrameRate = 500;
}
if (QualitySettings.vSyncCount != 0)
{
QualitySettings.vSyncCount = 0;
}
}
if (ConfigCtrl.fpsEnabled.Value)
{
KeyboardShortcut value = ConfigCtrl.fpsHotkey.Value;
if (((KeyboardShortcut)(ref value)).IsDown())
{
FpsCtrl.state = !FpsCtrl.state;
}
}
if (ConfigCtrl.hudEnabled.Value)
{
KeyboardShortcut value2 = ConfigCtrl.hudHotkey.Value;
if (((KeyboardShortcut)(ref value2)).IsDown())
{
HudCtrl.HudToggle();
}
}
}
private void Start()
{
if (ConfigCtrl.frameRateOverride.Value)
{
Application.targetFrameRate = 500;
QualitySettings.vSyncCount = 0;
}
}
private void CreateCustomLogger()
{
try
{
mls = Logger.CreateLogSource("LessonLethal.BetterUI");
}
catch
{
mls = ((BaseUnityPlugin)this).Logger;
}
}
public static void Log(string message)
{
mls.LogMessage((object)message);
}
}
internal static class ConfigCtrl
{
internal static ConfigEntry<bool> hudEnabled;
internal static ConfigEntry<KeyboardShortcut> hudHotkey;
internal static ConfigEntry<bool> fpsEnabled;
internal static ConfigEntry<KeyboardShortcut> fpsHotkey;
internal static ConfigEntry<int> fpsSize;
internal static ConfigEntry<string> fpsColorStr;
internal static Color fpsColor;
internal static ConfigEntry<bool> clockEnabled;
internal static ConfigEntry<KeyboardShortcut> clockHotkey;
internal static ConfigEntry<float> clockInsideVis;
internal static ConfigEntry<bool> realTimeClock;
internal static ConfigEntry<bool> autoFadeChat;
internal static ConfigEntry<bool> frameRateOverride;
public static void InitConfig(ConfigFile config)
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
hudEnabled = config.Bind<bool>("1_HUD", "Enable_HUD", true, "Enable the HUD Hotkey");
hudHotkey = config.Bind<KeyboardShortcut>("1_HUD", "HUD_Hotkey", new KeyboardShortcut((KeyCode)263, Array.Empty<KeyCode>()), "Hotkey to toggle the visibility of the HUD");
fpsEnabled = config.Bind<bool>("2_FPS", "Enable_FPS", true, "Enable the FPS Hotkey");
fpsHotkey = config.Bind<KeyboardShortcut>("2_FPS", "FPS_Hotkey", new KeyboardShortcut((KeyCode)264, Array.Empty<KeyCode>()), "Hotkey to toggle the visibility of the FPS counter (hidden by default)");
fpsSize = config.Bind<int>("2_FPS", "FPS_Font_Size", 13, "Change the FPS font size");
fpsColorStr = config.Bind<string>("2_FPS", "FPS_Font_Color", "#FFFFFF", "Change the FPS font color (HEX Code)");
ColorUtility.TryParseHtmlString(fpsColorStr.Value, ref fpsColor);
clockEnabled = config.Bind<bool>("3_Clock", "Enable_Clock", true, "Enable the Clock Hotkey");
clockHotkey = config.Bind<KeyboardShortcut>("3_Clock", "Clock_Hotkey", new KeyboardShortcut((KeyCode)265, Array.Empty<KeyCode>()), "Hotkey to toggle the visibility of the clock when you're inside the ship or a building (hidden by default)");
clockInsideVis = config.Bind<float>("3_Clock", "Clock_Inside_Visibility", 0.3f, "Visibility of the clock when inside the ship or a building");
realTimeClock = config.Bind<bool>("3_Clock", "Real_Time_Clock", false, "Smooth the speed of time on the clock (appearance only)");
autoFadeChat = config.Bind<bool>("4_CHAT", "Auto_Fade_Chat", true, "Hides the chat box when not being used");
frameRateOverride = config.Bind<bool>("5_EXPERIMENTAL", "Frame_Rate_Override", false, "Set target frame rate to 500 and turn off vSync");
}
}
public static class PluginInfo
{
public const string GUID = "LessonLethal.BetterUI";
public const string AUTHOR = "LessonLethal";
public const string NAME = "BetterUI";
public const string VERSION = "1.1.0";
}
}
namespace BetterUI.Patches
{
[HarmonyPatch(typeof(HUDManager))]
internal class ChatCtrl
{
[HarmonyPatch("AddChatMessage")]
[HarmonyPatch("OpenMenu_performed")]
[HarmonyPatch("SubmitChat_performed")]
[HarmonyPostfix]
public static void FadeToNothing(ref HUDManager __instance)
{
__instance.PingHUDElement(__instance.Chat, 5f, 1f, 0f);
}
}
[HarmonyPatch(typeof(HUDManager))]
internal static class ClockCtrl
{
private static bool state;
[HarmonyPrefix]
[HarmonyPatch("SetClockVisible")]
public static bool PrefixVisible(ref HUDManager __instance)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Expected O, but got Unknown
KeyboardShortcut value = ConfigCtrl.clockHotkey.Value;
if (((KeyboardShortcut)(ref value)).IsDown())
{
state = !state;
}
GameNetworkManager instance = GameNetworkManager.Instance;
PlayerControllerB val = null;
if ((Object)(object)instance != (Object)null)
{
val = instance.localPlayerController;
}
if ((Object)val != (Object)null && (val.isInHangarShipRoom || val.isInsideFactory))
{
__instance.Clock.targetAlpha = (state ? ConfigCtrl.clockInsideVis.Value : 0f);
return false;
}
return true;
}
}
internal static class FpsCtrl
{
public static bool state;
public static float dTime;
public static void FpsProcessor()
{
Mathf.RoundToInt(1f / dTime);
int num = Mathf.RoundToInt(1f / Time.deltaTime);
if (state)
{
DrawFPS("{0}", num);
}
}
public static void FpsProcessorRelay()
{
dTime += (Time.unscaledDeltaTime - dTime) * 0.1f;
}
public static void DrawFPS(string format, params object[] args)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Expected O, but got Unknown
string text = string.Format(format, args);
GUIStyle val = new GUIStyle(GUI.skin.label);
val.fontSize = ConfigCtrl.fpsSize.Value;
val.normal.textColor = ConfigCtrl.fpsColor;
val.fontStyle = (FontStyle)0;
GUI.Label(new Rect((float)Screen.width - 30f, 5f, 30f, 30f), new GUIContent(text), val);
}
}
internal class HudCtrl
{
private static bool state;
public static void HudToggle()
{
state = !state;
HUDManager.Instance.HideHUD(state);
}
}
[HarmonyPatch(typeof(HUDManager))]
internal static class TimeCtrl
{
private static int lTime = -1;
[HarmonyPostfix]
[HarmonyPatch(typeof(TimeOfDay))]
[HarmonyPatch("MoveTimeOfDay")]
public static void PostfixMoveTimeOfDay(ref TimeOfDay __instance, ref float ___changeHUDTimeInterval)
{
int num = (int)(__instance.normalizedTimeOfDay * (60f * (float)__instance.numberOfHours));
if (num != lTime)
{
lTime = num;
HUDManager.Instance.SetClock(__instance.normalizedTimeOfDay, (float)__instance.numberOfHours, true);
___changeHUDTimeInterval = 0f;
}
}
}
}