diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index c71fb95..242be37 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -37,6 +37,7 @@ namespace TerraTech { ModuleItemHolderManager.Setup(Config); ModuleItemProducerManager.Setup(Config); ModuleRemoteChargerManager.Setup(Config); + ModuleWheelsManager.Setup(Config); xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, diff --git a/Projects/TerraTech/TerraTech/ModuleWheelsManager.cs b/Projects/TerraTech/TerraTech/ModuleWheelsManager.cs new file mode 100644 index 0000000..a98d3b3 --- /dev/null +++ b/Projects/TerraTech/TerraTech/ModuleWheelsManager.cs @@ -0,0 +1,54 @@ +using System; +using BepInEx.Configuration; +using HarmonyLib; + +namespace TerraTech { + [HarmonyPatch] + public class ModuleWheelsManager { + private static readonly MultipliedObjectManager torqueParamsManager = + new MultipliedObjectManager(ConfigureTorqueParams); + + public static ConfigEntry torqueRpmMultiplier; + public static ConfigEntry torqueMultiplier; + + public static void Setup(ConfigFile config) { + float min = 0.01f; + float max = 32f; + + torqueRpmMultiplier = + config.Bind("TorqueParams", "Torque RPM Multiplier", 1f, + new ConfigDescription("Torque RPM Multiplier", new AcceptableValueRange(min, max))); + torqueRpmMultiplier.SettingChanged += (sender, args) => DoPatch(); + + torqueMultiplier = + config.Bind("TorqueParams", "Torque Multiplier", 1f, + new ConfigDescription("Torque Multiplier", new AcceptableValueRange(min, max))); + torqueMultiplier.SettingChanged += (sender, args) => DoPatch(); + } + + private static void ConfigureTorqueParams(MultipliedObject obj) { + obj.AddField(new FieldConfiguration("torqueCurveMaxRpm", torqueRpmMultiplier)); + obj.AddField(new FieldConfiguration("torqueCurveMaxTorque", torqueMultiplier)); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleWheels), "OnAttached")] + static void PostfixCreate(ModuleWheels __instance) { + var trav = Traverse.Create(__instance); + var torqueParams = trav.Field("torqueParams"); + torqueParamsManager.OnObjectAttached(torqueParams.GetValue()); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleWheels), "OnDetaching")] + static void PostfixDestroy(ModuleWheels __instance) { + var trav = Traverse.Create(__instance); + var torqueParams = trav.Field("torqueParams"); + torqueParamsManager.OnObjectDetached(torqueParams.GetValue()); + } + + public static void DoPatch() { + torqueParamsManager.ApplyAll(); + } + } +} diff --git a/Projects/TerraTech/TerraTech/ObjectFieldMultiplier.cs b/Projects/TerraTech/TerraTech/ObjectFieldMultiplier.cs index f142bf2..2e2a629 100644 --- a/Projects/TerraTech/TerraTech/ObjectFieldMultiplier.cs +++ b/Projects/TerraTech/TerraTech/ObjectFieldMultiplier.cs @@ -323,8 +323,7 @@ namespace TerraTech { /// Manages a collection of objects whose fields can be multiplied /// /// The type of objects being managed - public class MultipliedObjectManager - where T : class { + public class MultipliedObjectManager { private readonly Dictionary> _managedObjects; private readonly Action> _configureObject; diff --git a/Projects/TerraTech/TerraTech/TerraTech.csproj b/Projects/TerraTech/TerraTech/TerraTech.csproj index e3ba468..5bd921b 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -52,6 +52,7 @@ +