Decompiled source of CustomFlashlight v1.0.0

CustomFlashlight.dll

Decompiled a week ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BBModMenu;
using CustomFlashlight;
using MelonLoader;
using UnityEngine;
using UnityEngine.UIElements;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(FlashlightMod), "FlashlightToggle", "1.0.0", "Bowilla", null)]
[assembly: MelonGame("", "Beton Brutal")]
[assembly: AssemblyTitle("FlashlightToggle")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FlashlightToggle")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("7cc147f5-c8aa-4f03-bf1f-71c78f5e8cdf")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace CustomFlashlight;

public class FlashlightMod : MelonMod
{
	private Light flashlight;

	private bool toggle_enable = true;

	private float intensity = 3f;

	private Color color = new Color(1f, 1f, 1f);

	private string toggleKey;

	private float[] custom_light;

	public override void OnLateInitializeMelon()
	{
		//IL_0712: Unknown result type (might be due to invalid IL or missing references)
		MelonLogger.Msg("CustomFlashlight starting to load.");
		flashlight = Light.GetLights((LightType)0, 0)[0];
		GameObject val = GameObject.Find("GameUI");
		GameUI component = val.GetComponent<GameUI>();
		UIScreen? obj = ((typeof(GameUI)?.GetField("screens", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(component) is List<UIScreen> source) ? ((IEnumerable<UIScreen>)source).FirstOrDefault((Func<UIScreen, bool>)((UIScreen screen) => screen is ModMenu)) : null);
		ModMenu val2 = (ModMenu)(object)((obj is ModMenu) ? obj : null);
		if (val2 == null)
		{
			MelonLogger.Msg("ModMenu not found");
			return;
		}
		string text = "Flashlight";
		VisualElement flashlightSettings = val2.AddSetting(text);
		Toggle val3 = val2.CreateToggle(text, "CameraGlow", true);
		INotifyValueChangedExtensions.RegisterValueChangedCallback<bool>((INotifyValueChanged<bool>)(object)val3, (EventCallback<ChangeEvent<bool>>)delegate(ChangeEvent<bool> b)
		{
			((Component)Camera.main).GetComponentInChildren<Light>().intensity = (b.newValue ? 1 : 0);
		});
		HotKeyEntry val4 = val2.CreateHotKey(text, "ToggleHotkey", (KeyCode)108);
		toggleKey = val4.Value;
		val4.OnChanged = (Action<string>)Delegate.Combine(val4.OnChanged, (Action<string>)delegate(string newKey)
		{
			MelonLogger.Msg("Flashlight Toggle Hotkey : " + newKey);
			toggleKey = newKey;
		});
		Slider intensitySlider = val2.CreateSlider(text, "Intensity", 0f, 10f, 3f, false);
		INotifyValueChangedExtensions.RegisterValueChangedCallback<float>((INotifyValueChanged<float>)(object)intensitySlider, (EventCallback<ChangeEvent<float>>)delegate(ChangeEvent<float> f)
		{
			intensity = f.newValue;
			if (flashlight.intensity > 0f)
			{
				flashlight.intensity = intensity;
			}
			custom_light[0] = f.newValue;
		});
		Slider rangeSlider = val2.CreateSlider(text, "Range", 0f, 500f, 15f, true);
		INotifyValueChangedExtensions.RegisterValueChangedCallback<float>((INotifyValueChanged<float>)(object)rangeSlider, (EventCallback<ChangeEvent<float>>)delegate(ChangeEvent<float> f)
		{
			flashlight.range = f.newValue;
			custom_light[1] = f.newValue;
		});
		Slider angleSlider = val2.CreateSlider(text, "Angle", 0f, 160f, 120f, true);
		INotifyValueChangedExtensions.RegisterValueChangedCallback<float>((INotifyValueChanged<float>)(object)angleSlider, (EventCallback<ChangeEvent<float>>)delegate(ChangeEvent<float> f)
		{
			flashlight.spotAngle = f.newValue;
			custom_light[2] = f.newValue;
		});
		Slider rSlider = val2.CreateSlider(text, "Red", 0f, 1f, 1f, false);
		INotifyValueChangedExtensions.RegisterValueChangedCallback<float>((INotifyValueChanged<float>)(object)rSlider, (EventCallback<ChangeEvent<float>>)delegate(ChangeEvent<float> f)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			color.r = f.newValue;
			flashlight.color = color;
			custom_light[3] = f.newValue;
		});
		Slider gSlider = val2.CreateSlider(text, "Green", 0f, 1f, 1f, false);
		INotifyValueChangedExtensions.RegisterValueChangedCallback<float>((INotifyValueChanged<float>)(object)gSlider, (EventCallback<ChangeEvent<float>>)delegate(ChangeEvent<float> f)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			color.g = f.newValue;
			flashlight.color = color;
			custom_light[4] = f.newValue;
		});
		Slider bSlider = val2.CreateSlider(text, "Blue", 0f, 1f, 1f, false);
		INotifyValueChangedExtensions.RegisterValueChangedCallback<float>((INotifyValueChanged<float>)(object)bSlider, (EventCallback<ChangeEvent<float>>)delegate(ChangeEvent<float> f)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			color.b = f.newValue;
			flashlight.color = color;
			custom_light[5] = f.newValue;
		});
		VisualElement sliderGroup = val2.CreateGroup("CustomLightSliders");
		List<string> list = new List<string> { "Default Flashlight", "Cheap Flashlight", "Cold Headlight", "Warm Headlight", "Night Vision Goggles", "UV Flashlight", "Builder's Super Torch", "Custom Flashlight" };
		Dictionary<string, float[]> dictionary = new Dictionary<string, float[]>
		{
			{
				"Default Flashlight",
				new float[6] { 3f, 15f, 120f, 1f, 1f, 1f }
			},
			{
				"Cheap Flashlight",
				new float[6] { 4f, 5f, 85f, 1f, 1f, 1f }
			},
			{
				"Cold Headlight",
				new float[6] { 3f, 150f, 120f, 0.7f, 0.7f, 1f }
			},
			{
				"Warm Headlight",
				new float[6] { 2f, 150f, 120f, 1f, 0.7f, 0.5f }
			},
			{
				"Night Vision Goggles",
				new float[6] { 3f, 500f, 160f, 0.3f, 1f, 0.3f }
			}
		};
		float[] obj2 = new float[6] { 10f, 15f, 0f, 0.3f, 0f, 1f };
		obj2[2] = Camera.main.fieldOfView;
		dictionary.Add("UV Flashlight", obj2);
		dictionary.Add("Builder's Super Torch", new float[6] { 2f, 500f, 160f, 1f, 1f, 1f });
		dictionary.Add("Custom Flashlight", new float[6]
		{
			((BaseField<float>)(object)intensitySlider).value,
			((BaseField<float>)(object)rangeSlider).value,
			((BaseField<float>)(object)angleSlider).value,
			((BaseField<float>)(object)rSlider).value,
			((BaseField<float>)(object)gSlider).value,
			((BaseField<float>)(object)bSlider).value
		});
		Dictionary<string, float[]> lightValues = dictionary;
		CarouselEntry val5 = val2.CreateCarousel(text, "FlashlightPresets", list, (Action<string>)delegate(string _key)
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			MelonLogger.Msg("Flashlight changed to " + _key);
			lightValues.TryGetValue(_key, out var value2);
			flashlight.intensity = (intensity = value2[0]);
			flashlight.range = value2[1];
			flashlight.spotAngle = value2[2];
			flashlight.color = new Color(value2[3], value2[4], value2[5]);
			if (_key == "Custom Flashlight")
			{
				custom_light = value2;
				((BaseField<float>)(object)intensitySlider).value = value2[0];
				((BaseField<float>)(object)rangeSlider).value = value2[1];
				((BaseField<float>)(object)angleSlider).value = value2[2];
				((BaseField<float>)(object)rSlider).value = value2[3];
				((BaseField<float>)(object)gSlider).value = value2[4];
				((BaseField<float>)(object)bSlider).value = value2[5];
				flashlightSettings.Add(sliderGroup);
			}
			else
			{
				flashlightSettings.Remove(sliderGroup);
			}
		}, "Default Flashlight");
		VisualElement val6 = val2.CreateGroup("Toggles");
		VisualElement val7 = val2.CreateWrapper();
		val7.Add((VisualElement)(object)val2.CreateLabel("Flashlight Power Button"));
		val7.Add(val4.Root);
		VisualElement val8 = val2.CreateWrapper();
		val8.Add((VisualElement)(object)val2.CreateLabel("Enable Camera Glow"));
		val8.Add((VisualElement)(object)val3);
		VisualElement val9 = val2.CreateWrapper();
		val9.Add((VisualElement)(object)val2.CreateLabel("Flashlight Presets"));
		val9.Add(val5.Root);
		val6.Add(val7);
		val6.Add(val8);
		val6.Add(val9);
		VisualElement val10 = val2.CreateWrapper();
		val10.Add((VisualElement)(object)val2.CreateLabel("Intensity"));
		val10.Add((VisualElement)(object)intensitySlider);
		VisualElement val11 = val2.CreateWrapper();
		val11.Add((VisualElement)(object)val2.CreateLabel("Range"));
		val11.Add((VisualElement)(object)rangeSlider);
		VisualElement val12 = val2.CreateWrapper();
		val12.Add((VisualElement)(object)val2.CreateLabel("Angle"));
		val12.Add((VisualElement)(object)angleSlider);
		VisualElement val13 = val2.CreateWrapper();
		val13.Add((VisualElement)(object)val2.CreateLabel("Red"));
		val13.Add((VisualElement)(object)rSlider);
		VisualElement val14 = val2.CreateWrapper();
		val14.Add((VisualElement)(object)val2.CreateLabel("Green"));
		val14.Add((VisualElement)(object)gSlider);
		VisualElement val15 = val2.CreateWrapper();
		val15.Add((VisualElement)(object)val2.CreateLabel("Blue"));
		val15.Add((VisualElement)(object)bSlider);
		sliderGroup.Add(val10);
		sliderGroup.Add(val11);
		sliderGroup.Add(val12);
		sliderGroup.Add(val13);
		sliderGroup.Add(val14);
		sliderGroup.Add(val15);
		flashlightSettings.Add(val6);
		lightValues.TryGetValue(val5.Value, out var value);
		flashlight.intensity = (intensity = value[0]);
		flashlight.range = value[1];
		flashlight.spotAngle = value[2];
		flashlight.color = new Color(value[3], value[4], value[5]);
		if (val5.Value == "Custom Flashlight")
		{
			custom_light = value;
			flashlightSettings.Add(sliderGroup);
		}
		((Component)Camera.main).GetComponentInChildren<Light>().intensity = (((BaseField<bool>)(object)val3).value ? 1 : 0);
	}

	public override void OnUpdate()
	{
		if (toggle_enable && Utils.IsHotkeyPressed(toggleKey))
		{
			if (flashlight.intensity > 0f)
			{
				flashlight.intensity = 0f;
			}
			else
			{
				flashlight.intensity = intensity;
			}
		}
	}
}