diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index d6747f0..c71fb95 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -36,6 +36,7 @@ namespace TerraTech { ModuleGyroManager.Setup(Config); ModuleItemHolderManager.Setup(Config); ModuleItemProducerManager.Setup(Config); + ModuleRemoteChargerManager.Setup(Config); xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, diff --git a/Projects/TerraTech/TerraTech/ModuleRemoteChargerManager.cs b/Projects/TerraTech/TerraTech/ModuleRemoteChargerManager.cs new file mode 100644 index 0000000..859afc6 --- /dev/null +++ b/Projects/TerraTech/TerraTech/ModuleRemoteChargerManager.cs @@ -0,0 +1,58 @@ +using System; +using BepInEx.Configuration; +using HarmonyLib; + +namespace TerraTech { + [HarmonyPatch] + public class ModuleRemoteChargerManager { + private static readonly MultipliedObjectManager manager = + new MultipliedObjectManager(ConfigureModuleRemoteCharger); + + public static ConfigEntry arcFiringIntervalMultiplier; + public static ConfigEntry chargingRadiusMultiplier; + public static ConfigEntry powerTransferPerArcMultiplier; + + public static void Setup(ConfigFile config) { + float min = 0.01f; + float max = 32f; + + arcFiringIntervalMultiplier = config.Bind( + "Remote Charger", "Arc Firing Interval Multiplier", 1f, + new ConfigDescription("Arc Firing Interval Multiplier", new AcceptableValueRange(min, max))); + arcFiringIntervalMultiplier.SettingChanged += (sender, args) => DoPatch(); + + chargingRadiusMultiplier = config.Bind( + "Remote Charger", "Charging Radius Multiplier", 1f, + new ConfigDescription("Charging Radius Multiplier", new AcceptableValueRange(min, max))); + chargingRadiusMultiplier.SettingChanged += (sender, args) => DoPatch(); + + powerTransferPerArcMultiplier = config.Bind( + "Remote Charger", "Power Transfer Per Arc Multiplier", 1f, + new ConfigDescription("Power Transfer Per Arc Multiplier", new AcceptableValueRange(min, max))); + powerTransferPerArcMultiplier.SettingChanged += (sender, args) => DoPatch(); + } + + private static void ConfigureModuleRemoteCharger(MultipliedObject obj) { + obj.AddField( + new FieldConfiguration("m_ArcFiringInterval", arcFiringIntervalMultiplier)); + obj.AddField(new FieldConfiguration("m_ChargingRadius", chargingRadiusMultiplier)); + obj.AddField(new FieldConfiguration("m_PowerTransferPerArc", powerTransferPerArcMultiplier)); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleRemoteCharger), "OnAttached")] + static void PostfixCreate(ModuleRemoteCharger __instance) { + manager.OnObjectAttached(__instance); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleRemoteCharger), "OnDetaching")] + static void PostfixDestroy(ModuleRemoteCharger __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 0154ad2..e3ba468 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -51,6 +51,7 @@ +