diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index 242be37..37908f1 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -38,6 +38,7 @@ namespace TerraTech { ModuleItemProducerManager.Setup(Config); ModuleRemoteChargerManager.Setup(Config); ModuleWheelsManager.Setup(Config); + TankBeamManager.Setup(Config); xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, diff --git a/Projects/TerraTech/TerraTech/TankBeamManager.cs b/Projects/TerraTech/TerraTech/TankBeamManager.cs new file mode 100644 index 0000000..3c3a0e4 --- /dev/null +++ b/Projects/TerraTech/TerraTech/TankBeamManager.cs @@ -0,0 +1,57 @@ +using System; +using BepInEx.Configuration; +using HarmonyLib; + +namespace TerraTech { + [HarmonyPatch] + public class TankBeamManager { + private static readonly MultipliedObjectManager manager = + new MultipliedObjectManager(ConfigureBeam); + + public static ConfigEntry hoverClearanceMultiplier; + public static ConfigEntry nudgeSpeedForwardMultiplier; + public static ConfigEntry nudgeSpeedRotateMultiplier; + + public static void Setup(ConfigFile config) { + float min = 0.01f; + float max = 32f; + + hoverClearanceMultiplier = config.Bind( + "TankBeam", "Hover Clearance Multiplier", 1f, + new ConfigDescription("Hover Clearance Multiplier", new AcceptableValueRange(min, max))); + hoverClearanceMultiplier.SettingChanged += (sender, args) => DoPatch(); + + nudgeSpeedForwardMultiplier = config.Bind( + "TankBeam", "Nudge Speed Forward Multiplier", 1f, + new ConfigDescription("Nudge Speed Forward Multiplier", new AcceptableValueRange(min, max))); + nudgeSpeedForwardMultiplier.SettingChanged += (sender, args) => DoPatch(); + + nudgeSpeedRotateMultiplier = config.Bind( + "TankBeam", "Nudge Speed Rotate Multiplier", 1f, + new ConfigDescription("Nudge Speed Rotate Multiplier", new AcceptableValueRange(min, max))); + nudgeSpeedRotateMultiplier.SettingChanged += (sender, args) => DoPatch(); + } + + private static void ConfigureBeam(MultipliedObject obj) { + obj.AddField(new FieldConfiguration("hoverClearance", hoverClearanceMultiplier)); + obj.AddField(new FieldConfiguration("nudgeSpeedForward", nudgeSpeedForwardMultiplier)); + obj.AddField(new FieldConfiguration("nudgeSpeedRotate", nudgeSpeedRotateMultiplier)); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(TankBeam), "OnSpawn")] + static void PostfixCreate(TankBeam __instance) { + manager.OnObjectAttached(__instance); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(TankBeam), "OnRecycle")] + static void PostfixDestroy(TankBeam __instance) { + manager.OnObjectDetached(__instance); + } + + public static void DoPatch() { + manager.ApplyAll(); + } + } +} diff --git a/Projects/TerraTech/TerraTech/TerraTech.csproj b/Projects/TerraTech/TerraTech/TerraTech.csproj index 5bd921b..8834fca 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -53,6 +53,7 @@ +