Decompiled source of BetterFlashlight v1.0.0

BetterFlashlight.dll

Decompiled a month ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BetterFlashlight;
using HarmonyLib;
using Il2CppScheduleOne.UI.Phone;
using Il2CppSystem.IO;
using MelonLoader;
using MelonLoader.Utils;
using Newtonsoft.Json;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(Main), "Better Flashlight", "1.0.0", "LAKHLEF Mehdi", null)]
[assembly: MelonGame("TVGS", "Schedule I")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("BetterFlashlight")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BetterFlashlight")]
[assembly: AssemblyTitle("BetterFlashlight")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace BetterFlashlight;

public static class ConfigManager
{
	public static string ConfigPath = Path.Combine(MelonEnvironment.UserDataDirectory, "flashlight_config.json");

	public static FlashlightConfig LoadConfig()
	{
		if (!File.Exists(ConfigPath))
		{
			FlashlightConfig flashlightConfig = FlashlightConfig.Default();
			SaveConfig(flashlightConfig);
			return flashlightConfig;
		}
		string text = File.ReadAllText(ConfigPath);
		MelonLogger.Msg("JSON lu : " + text);
		return JsonConvert.DeserializeObject<FlashlightConfig>(text);
	}

	public static void SaveConfig(FlashlightConfig config)
	{
		try
		{
			string text = JsonConvert.SerializeObject((object)config, (Formatting)1);
			File.WriteAllText(ConfigPath, text);
		}
		catch (Exception ex)
		{
			MelonLogger.Error("Failed to save config: " + ex.Message);
		}
	}
}
public static class CustomFlashlight
{
	private static Light _customLight;

	public static void Init()
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		FlashlightConfig flashlightConfig = ConfigManager.LoadConfig();
		GameObject val = new GameObject("ModdedFlashlight");
		_customLight = val.AddComponent<Light>();
		_customLight.type = (LightType)0;
		_customLight.range = flashlightConfig.Range;
		_customLight.intensity = flashlightConfig.Intensity;
		_customLight.spotAngle = flashlightConfig.SpotAngle;
		((Behaviour)_customLight).enabled = false;
		Color color = default(Color);
		if (ColorUtility.TryParseHtmlString(flashlightConfig.LightColor, ref color))
		{
			_customLight.color = color;
		}
		else
		{
			_customLight.color = Color.green;
			MelonLogger.Warning("[Better Flashlight] Erreur de parsing de la couleur. Couleur verte par défaut appliquée.");
		}
		if ((Object)(object)Camera.main != (Object)null)
		{
			val.transform.SetParent(((Component)Camera.main).transform);
			val.transform.localPosition = new Vector3(0f, -0.1f, 0.5f);
			val.transform.localRotation = Quaternion.identity;
		}
	}

	public static void SetState(bool on)
	{
		if ((Object)(object)_customLight != (Object)null)
		{
			((Behaviour)_customLight).enabled = on;
		}
	}
}
public class FlashlightConfig
{
	public string LightColor = "#00FF00";

	public float Intensity = 3f;

	public float Range = 30f;

	public float SpotAngle = 100f;

	public static FlashlightConfig Default()
	{
		return new FlashlightConfig();
	}
}
[HarmonyPatch(typeof(Phone), "Update")]
public class FlashlightUpdatePatch
{
	private static bool lastState;

	[HarmonyPostfix]
	public static void Postfix(Phone __instance)
	{
		if ((Object)(object)__instance == (Object)null)
		{
			return;
		}
		bool flashlightOn = __instance.FlashlightOn;
		if (flashlightOn != lastState)
		{
			lastState = flashlightOn;
			MelonLogger.Msg($"[BetterFlashlight] Flashlight state changed to: {flashlightOn}");
			CustomFlashlight.SetState(flashlightOn);
			if ((Object)(object)__instance.PhoneFlashlight != (Object)null)
			{
				__instance.PhoneFlashlight.SetActive(false);
			}
		}
	}
}
public class Main : MelonMod
{
	private bool flashlightInitialized;

	public override void OnInitializeMelon()
	{
		MelonLogger.Msg("Mod BetterFlashlight loaded !");
	}

	public override void OnUpdate()
	{
		if (!flashlightInitialized && (Object)(object)Camera.main != (Object)null && (Object)(object)((Component)Camera.main).GetComponent<Camera>() != (Object)null)
		{
			CustomFlashlight.Init();
			flashlightInitialized = true;
		}
	}
}