Decompiled source of CookedInfo v1.2.3

CookedInfo.dll

Decompiled 4 days ago
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
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("CookedInfo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CookedInfo")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("dd8fbe8a-de2b-4d9a-917e-e86b43c6cf06")]
[assembly: AssemblyFileVersion("1.2.3.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.2.3.0")]
namespace CookedInfo;

internal static class DescriptionBuilder
{
	private const string red = "#4D0000";

	private const string green = "#003300";

	private const string yellow = "#CC7F00";

	private const string light_blue = "#2861FC";

	private const string med_blue = "#1C3270";

	private const string dark_blue = "#071336";

	public static void BurnableDescription(ref string description, float amount)
	{
		if (amount > 0f && amount < 1f)
		{
			description = BuildDescription("#CC7F00", description, amount) ?? "";
		}
		if (amount >= 1f && amount < 1.25f)
		{
			description = BuildDescription("#003300", description, amount) ?? "";
		}
		if (amount >= 1.25f)
		{
			description = BuildDescription("#4D0000", "overcooked " + description.Replace("cooked ", ""), amount) ?? "";
		}
	}

	public static void NonBurnableDescription(ref string description, float amount)
	{
		if (amount > 0f && amount < 1f)
		{
			description = BuildDescription("#CC7F00", description, amount, canOvercook: false) ?? "";
		}
		if (amount >= 1f)
		{
			description = BuildDescription("#003300", description, amount, canOvercook: false) ?? "";
		}
	}

	private static string BuildDescription(string color, string desc, float amount, bool canOvercook = true)
	{
		if (!Plugin.configColoredText.Value)
		{
			return desc + CookedPercent(amount, canOvercook) + CookingBar(amount);
		}
		return desc + "<color=" + color + ">" + CookedPercent(amount, canOvercook) + CookingBar(amount) + "</color>";
	}

	private static string CookedPercent(float amount, bool canOvercook)
	{
		if (!Plugin.configCookingPercent.Value)
		{
			return "";
		}
		amount = Mathf.RoundToInt(amount * 100f);
		amount = ((!canOvercook && amount > 100f) ? 100f : amount);
		return $"\n<b>{amount}%</b>";
	}

	private static string CookingBar(float amount)
	{
		if (!Plugin.configCookingBar.Value)
		{
			return "";
		}
		return ProgressBar(amount) ?? "";
	}

	public static void Freshness(ref string description, float spoiled)
	{
		if (Plugin.configFreshnessBar.Value)
		{
			if (spoiled < 0.33f)
			{
				description = FreshnessBar("#2861FC", description, spoiled) ?? "";
			}
			if (spoiled >= 0.33f && spoiled < 0.66f)
			{
				description = FreshnessBar("#1C3270", description, spoiled) ?? "";
			}
			if (spoiled >= 0.66f)
			{
				description = FreshnessBar("#071336", description, spoiled) ?? "";
			}
		}
	}

	private static string FreshnessBar(string color, string foodDescr, float amount)
	{
		if (!Plugin.configColoredText.Value)
		{
			return foodDescr + ProgressBar(1f - amount);
		}
		return foodDescr + "<color=" + color + ">" + ProgressBar(1f - amount) + "</color>";
	}

	private static string ProgressBar(float amount)
	{
		int num = 300;
		int num2 = (int)(amount * (float)num);
		if (num2 <= 0 || num2 >= num)
		{
			return "";
		}
		StringBuilder stringBuilder = new StringBuilder();
		for (int i = 0; i < num; i++)
		{
			if (i < num2)
			{
				stringBuilder.Append("█");
			}
			else
			{
				stringBuilder.Append("░");
			}
		}
		return $"\n<size=3%>{stringBuilder}</size>";
	}
}
[BepInPlugin("pr0skynesis.cookedinfo", "Cooked Info", "1.2.3")]
public class Plugin : BaseUnityPlugin
{
	public const string PLUGIN_GUID = "pr0skynesis.cookedinfo";

	public const string PLUGIN_NAME = "Cooked Info";

	public const string PLUGIN_VERSION = "1.2.3";

	internal static Plugin instance;

	internal static ManualLogSource logger;

	internal static ConfigEntry<bool> configColoredText;

	internal static ConfigEntry<bool> configCookingPercent;

	internal static ConfigEntry<bool> configCookingBar;

	internal static ConfigEntry<bool> configFreshnessBar;

	private void Awake()
	{
		instance = this;
		logger = ((BaseUnityPlugin)this).Logger;
		Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "pr0skynesis.cookedinfo");
		configColoredText = ((BaseUnityPlugin)this).Config.Bind<bool>("Colored Text", "showColoredText", true, "Enables the colored text for raw, cooked, and overcooked food, change to false to disable it.");
		configCookingPercent = ((BaseUnityPlugin)this).Config.Bind<bool>("Cooking Percentage", "showCookingPercent", true, "Enables the cooking percentage when cooking or drying food, change to false to disable it.");
		configCookingBar = ((BaseUnityPlugin)this).Config.Bind<bool>("Loading Bar", "showCookingBar", true, "Enables the cooking loading bar when cooking or drying food, change to false to disable it.");
		configFreshnessBar = ((BaseUnityPlugin)this).Config.Bind<bool>("Freshness Bar", "showFreshnessBar", true, "Enables the freshness loading bar, change to false to disable it.");
	}
}
internal class Patches
{
	[HarmonyPatch(typeof(FoodState))]
	public class FoodStatePatches
	{
		[HarmonyPostfix]
		[HarmonyPatch("UpdateLookText")]
		public static void UpdateLookText_Patch(ShipItemFood ___food, CookableFood ___cookable, float ___dried, DryingRackCol ___dryingCol, float ___spoiled)
		{
			if (Object.op_Implicit((Object)(object)___cookable.GetCurrentCookTrigger()))
			{
				DescriptionBuilder.BurnableDescription(ref ((GoPointerButton)___food).description, ((ShipItem)___food).amount);
			}
			if (Object.op_Implicit((Object)(object)___dryingCol))
			{
				float amount = ___dried / 0.99f;
				DescriptionBuilder.NonBurnableDescription(ref ((GoPointerButton)___food).description, amount);
			}
			float spoiled = ___spoiled / 0.9f;
			DescriptionBuilder.Freshness(ref ((GoPointerButton)___food).description, spoiled);
		}
	}

	[HarmonyPatch(typeof(ShipItemSoup))]
	public class ShipItemSoupPatches
	{
		[HarmonyPostfix]
		[HarmonyPatch("UpdateLookText")]
		public static void UpdateLookText_Patch(ShipItemSoup __instance, CookableFoodSoup ___cookable, float ___currentWater, float ___currentEnergy, float ___currentUncookedEnergy, float ___currentSpoiled)
		{
			float num = ___currentEnergy / (___currentEnergy + ___currentUncookedEnergy);
			float num2 = ___currentSpoiled / (___currentEnergy + ___currentUncookedEnergy) / 0.9f;
			if (num > 0f && num < 1f)
			{
				((GoPointerButton)__instance).description = "uncooked soup";
			}
			if (num >= 1f)
			{
				((GoPointerButton)__instance).description = "cooked soup";
			}
			if (num2 >= 1f)
			{
				((GoPointerButton)__instance).description = "rotten soup";
			}
			if (___currentEnergy + ___currentUncookedEnergy == 0f)
			{
				((GoPointerButton)__instance).description = ((___currentWater > 0f) ? (((ShipItem)__instance).name + " of water") : ((ShipItem)__instance).name);
			}
			if (Object.op_Implicit((Object)(object)((CookableFood)___cookable).GetCurrentCookTrigger()))
			{
				DescriptionBuilder.NonBurnableDescription(ref ((GoPointerButton)__instance).description, num);
			}
			DescriptionBuilder.Freshness(ref ((GoPointerButton)__instance).description, num2);
		}
	}
}