Add ModuleItemProducerManager for configurable item producer settings

This commit is contained in:
2025-02-24 10:02:41 +01:00
parent cda2f3a75c
commit bd554f4c0f
4 changed files with 62 additions and 1 deletions

View File

@@ -35,6 +35,7 @@ namespace TerraTech {
ModuleEnergyStoreManager.Setup(Config); ModuleEnergyStoreManager.Setup(Config);
ModuleGyroManager.Setup(Config); ModuleGyroManager.Setup(Config);
ModuleItemHolderManager.Setup(Config); ModuleItemHolderManager.Setup(Config);
ModuleItemProducerManager.Setup(Config);
xpMultiplier = xpMultiplier =
Config.Bind("General", "XP Multiplier", 1f, Config.Bind("General", "XP Multiplier", 1f,

View File

@@ -66,7 +66,8 @@ namespace TerraTech {
private static void ConfigureBeamHolder(MultipliedObject<ModuleItemHolderBeam> obj) { private static void ConfigureBeamHolder(MultipliedObject<ModuleItemHolderBeam> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_BeamStrength", beamStrengthMultiplier)); obj.AddField(new FieldConfiguration<float, float>("m_BeamStrength", beamStrengthMultiplier));
obj.AddField(new FieldConfiguration<float, float>("m_HeightIncrementScale", beamHeightIncrementScaleMultiplier)); obj.AddField(
new FieldConfiguration<float, float>("m_HeightIncrementScale", beamHeightIncrementScaleMultiplier));
} }
private static void ConfigureBeamPickup(MultipliedObject<ModuleItemPickup> obj) { private static void ConfigureBeamPickup(MultipliedObject<ModuleItemPickup> obj) {

View File

@@ -0,0 +1,58 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace TerraTech {
[HarmonyPatch]
public class ModuleItemProducerManager {
private static readonly MultipliedObjectManager<ModuleItemProducer> manager =
new MultipliedObjectManager<ModuleItemProducer>(ConfigureModuleItemProducer);
public static ConfigEntry<float> resourceGroundRadiusMultiplier;
public static ConfigEntry<float> minDisperseIntervalMultiplier;
public static ConfigEntry<float> 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<float>(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<float>(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<float>(min, max)));
secPerItemProducedMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureModuleItemProducer(MultipliedObject<ModuleItemProducer> obj) {
obj.AddField(
new FieldConfiguration<float, float>("m_ResourceGroundRadius", resourceGroundRadiusMultiplier));
obj.AddField(new FieldConfiguration<float, float>("m_MinDisperseInterval", minDisperseIntervalMultiplier));
obj.AddField(new FieldConfiguration<float, float>("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();
}
}
}

View File

@@ -50,6 +50,7 @@
<Compile Include="ModuleEnergyStoreManager.cs" /> <Compile Include="ModuleEnergyStoreManager.cs" />
<Compile Include="ModuleGyroManager.cs" /> <Compile Include="ModuleGyroManager.cs" />
<Compile Include="ModuleItemHolderManager.cs" /> <Compile Include="ModuleItemHolderManager.cs" />
<Compile Include="ModuleItemProducerManager.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="0Harmony"> <Reference Include="0Harmony">