Decompiled source of ShakyCollisions v2.2.2

Mods/ShakyCollisions.dll

Decompiled 3 weeks ago
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using Il2CppRUMBLE.MoveSystem;
using Il2CppRUMBLE.Utilities;
using MelonLoader;
using MelonLoader.Preferences;
using ShakyCollisions;
using UIFramework;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(main), "Shaky Collisions", "2.2.2", "UlvakSkillz", null)]
[assembly: MelonGame("Buckethead Entertainment", "RUMBLE")]
[assembly: MelonColor(255, 195, 0, 255)]
[assembly: MelonAuthorColor(255, 195, 0, 255)]
[assembly: VerifyLoaderVersion(0, 7, 2, true)]
[assembly: MelonAdditionalDependencies(new string[] { "UIFramework" })]
[assembly: AssemblyTitle("ShakyCollisions")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ShakyCollisions")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("cc94f205-27d2-4bb4-bbb4-05905d12e30a")]
[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 ShakyCollisions;

public class main : MelonMod
{
	public static class BuildInfo
	{
		public const string ModName = "Shaky Collisions";

		public const string ModVersion = "2.2.2";

		public const string Author = "UlvakSkillz";
	}

	public override void OnInitializeMelon()
	{
		Preferences.InitPrefs();
		((ModelModItem)UI.Register((MelonBase)(object)this, (MelonPreferences_Category[])(object)new MelonPreferences_Category[1] { Preferences.ShakyCollisionsCategory })).OnModSaved += Save;
	}

	private void Save()
	{
		if (Preferences.AnyPrefsChanged())
		{
			if (Preferences.PrefEnabled.Value)
			{
				SceneSingleton<CombatManager>.instance.structureImpactShakeStrength = Preferences.PrefShakeStrength.Value;
			}
			else
			{
				SceneSingleton<CombatManager>.instance.structureImpactShakeStrength = 0.375f;
			}
			if (Preferences.PrefEnabled.Value)
			{
				SceneSingleton<CombatManager>.instance.structureImpactShakeFrequency = Preferences.PrefShakeFrequency.Value;
			}
			else
			{
				SceneSingleton<CombatManager>.instance.structureImpactShakeFrequency = 75f;
			}
		}
	}
}
public class Preferences
{
	private const string CONFIG_FILE = "config.cfg";

	private const string USER_DATA = "UserData/ShakyCollisions/";

	internal static Dictionary<MelonPreferences_Entry, object> LastSavedValues = new Dictionary<MelonPreferences_Entry, object>();

	internal static MelonPreferences_Category ShakyCollisionsCategory;

	internal static MelonPreferences_Entry<bool> PrefEnabled;

	internal static MelonPreferences_Entry<float> PrefShakeStrength;

	internal static MelonPreferences_Entry<float> PrefShakeFrequency;

	internal static void InitPrefs()
	{
		if (!Directory.Exists("UserData/ShakyCollisions/"))
		{
			Directory.CreateDirectory("UserData/ShakyCollisions/");
		}
		ShakyCollisionsCategory = MelonPreferences.CreateCategory("ShakyCollisions", "Settings");
		ShakyCollisionsCategory.SetFilePath(Path.Combine("UserData/ShakyCollisions/", "config.cfg"));
		PrefEnabled = ShakyCollisionsCategory.CreateEntry<bool>("Enabled", true, "Enabled", "Toggles the Mod On/Off", false, false, (ValueValidator)null, (string)null);
		PrefShakeStrength = ShakyCollisionsCategory.CreateEntry<float>("ShakeStrength", 1.875f, "Shake Strength", "Controls how Shaky the Structures are. 0.375 is the Game's Default", false, false, (ValueValidator)(object)new ValueRange<float>(0f, float.MaxValue), (string)null);
		PrefShakeFrequency = ShakyCollisionsCategory.CreateEntry<float>("ShakeFrequency", 150f, "Shake Frequency", "Controls how often it Shakes the Structures. 75 is the Game's Default", false, false, (ValueValidator)(object)new ValueRange<float>(0f, float.MaxValue), (string)null);
		StoreLastSavedPrefs();
	}

	internal static void StoreLastSavedPrefs()
	{
		List<MelonPreferences_Entry> list = new List<MelonPreferences_Entry>();
		list.AddRange(ShakyCollisionsCategory.Entries);
		foreach (MelonPreferences_Entry item in list)
		{
			LastSavedValues[item] = item.BoxedValue;
		}
	}

	public static bool AnyPrefsChanged()
	{
		foreach (KeyValuePair<MelonPreferences_Entry, object> lastSavedValue in LastSavedValues)
		{
			if (!lastSavedValue.Key.BoxedValue.Equals(lastSavedValue.Value))
			{
				return true;
			}
		}
		return false;
	}
}