diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index ffdf58f..d6747f0 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -35,6 +35,7 @@ namespace TerraTech { ModuleEnergyStoreManager.Setup(Config); ModuleGyroManager.Setup(Config); ModuleItemHolderManager.Setup(Config); + ModuleItemProducerManager.Setup(Config); xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, diff --git a/Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs b/Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs index 8761018..49e4573 100644 --- a/Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs @@ -66,7 +66,8 @@ namespace TerraTech { private static void ConfigureBeamHolder(MultipliedObject obj) { obj.AddField(new FieldConfiguration("m_BeamStrength", beamStrengthMultiplier)); - obj.AddField(new FieldConfiguration("m_HeightIncrementScale", beamHeightIncrementScaleMultiplier)); + obj.AddField( + new FieldConfiguration("m_HeightIncrementScale", beamHeightIncrementScaleMultiplier)); } private static void ConfigureBeamPickup(MultipliedObject obj) { diff --git a/Projects/TerraTech/TerraTech/ModuleItemProducerManager.cs b/Projects/TerraTech/TerraTech/ModuleItemProducerManager.cs new file mode 100644 index 0000000..7844f86 --- /dev/null +++ b/Projects/TerraTech/TerraTech/ModuleItemProducerManager.cs @@ -0,0 +1,58 @@ +using System; +using BepInEx.Configuration; +using HarmonyLib; + +namespace TerraTech { + [HarmonyPatch] + public class ModuleItemProducerManager { + private static readonly MultipliedObjectManager manager = + new MultipliedObjectManager(ConfigureModuleItemProducer); + + public static ConfigEntry resourceGroundRadiusMultiplier; + public static ConfigEntry minDisperseIntervalMultiplier; + public static ConfigEntry secPerItemProducedMultiplier; + + public static void Setup(ConfigFile config) { + float min = 0.01f; + float max = 32f; + + resourceGroundRadiusMultiplier = config.Bind( + "Item Producer", "Resource Ground Radius Multiplier", 1f, + new ConfigDescription("Resource Ground Radius Multiplier", new AcceptableValueRange(min, max))); + resourceGroundRadiusMultiplier.SettingChanged += (sender, args) => DoPatch(); + + minDisperseIntervalMultiplier = config.Bind( + "Item Producer", "Min Disperse Interval Multiplier", 1f, + new ConfigDescription("Min Disperse Interval Multiplier", new AcceptableValueRange(min, max))); + minDisperseIntervalMultiplier.SettingChanged += (sender, args) => DoPatch(); + + secPerItemProducedMultiplier = config.Bind( + "Item Producer", "Sec Per Item Produced Multiplier", 1f, + new ConfigDescription("Sec Per Item Produced Multiplier", new AcceptableValueRange(min, max))); + secPerItemProducedMultiplier.SettingChanged += (sender, args) => DoPatch(); + } + + private static void ConfigureModuleItemProducer(MultipliedObject obj) { + obj.AddField( + new FieldConfiguration("m_ResourceGroundRadius", resourceGroundRadiusMultiplier)); + obj.AddField(new FieldConfiguration("m_MinDisperseInterval", minDisperseIntervalMultiplier)); + obj.AddField(new FieldConfiguration("m_SecPerItemProduced", secPerItemProducedMultiplier)); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleItemProducer), "OnAttached")] + static void PostfixCreate(ModuleItemProducer __instance) { + manager.OnObjectAttached(__instance); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleItemProducer), "OnDetaching")] + static void PostfixDestroy(ModuleItemProducer __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 74f65a2..0154ad2 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -50,6 +50,7 @@ +