Add ModuleItemHolderManager for configurable item holder settings
This commit is contained in:
@@ -34,6 +34,7 @@ namespace TerraTech {
|
||||
ModuleEnergyManager.Setup(Config);
|
||||
ModuleEnergyStoreManager.Setup(Config);
|
||||
ModuleGyroManager.Setup(Config);
|
||||
ModuleItemHolderManager.Setup(Config);
|
||||
|
||||
xpMultiplier =
|
||||
Config.Bind("General", "XP Multiplier", 1f,
|
||||
|
144
Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs
Normal file
144
Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs
Normal file
@@ -0,0 +1,144 @@
|
||||
using System;
|
||||
using BepInEx.Configuration;
|
||||
using HarmonyLib;
|
||||
|
||||
namespace TerraTech {
|
||||
[HarmonyPatch]
|
||||
public class ModuleItemHolderManager {
|
||||
private static readonly MultipliedObjectManager<ModuleItemHolder> beamManager =
|
||||
new MultipliedObjectManager<ModuleItemHolder>(ConfigureBeam);
|
||||
private static readonly MultipliedObjectManager<ModuleItemHolderBeam> beamHolderManager =
|
||||
new MultipliedObjectManager<ModuleItemHolderBeam>(ConfigureBeamHolder);
|
||||
private static readonly MultipliedObjectManager<ModuleItemPickup> beamPickupManager =
|
||||
new MultipliedObjectManager<ModuleItemPickup>(ConfigureBeamPickup);
|
||||
|
||||
private static readonly MultipliedObjectManager<ModuleItemHolderMagnet> magnetHolderManager =
|
||||
new MultipliedObjectManager<ModuleItemHolderMagnet>(ConfigureMagnetHolder);
|
||||
private static readonly MultipliedObjectManager<ModuleItemPickup> magnetPickupManager =
|
||||
new MultipliedObjectManager<ModuleItemPickup>(ConfigureMagnetPickup);
|
||||
|
||||
public static ConfigEntry<float> capacityPerStackMultiplier;
|
||||
public static ConfigEntry<float> beamStrengthMultiplier;
|
||||
public static ConfigEntry<float> beamHeightIncrementScaleMultiplier;
|
||||
public static ConfigEntry<float> beamPickupRangeMultiplier;
|
||||
public static ConfigEntry<float> magnetStrengthMultiplier;
|
||||
public static ConfigEntry<float> magnetPickupRangeMultiplier;
|
||||
|
||||
public static void Setup(ConfigFile config) {
|
||||
float min = 0.01f;
|
||||
float max = 32f;
|
||||
|
||||
capacityPerStackMultiplier = config.Bind(
|
||||
"Item Holder", "Capacity Per Stack Multiplier", 1f,
|
||||
new ConfigDescription("Capacity Per Stack Multiplier", new AcceptableValueRange<float>(min, max)));
|
||||
capacityPerStackMultiplier.SettingChanged += (sender, args) => DoPatch();
|
||||
|
||||
beamStrengthMultiplier = config.Bind(
|
||||
"Item Holder", "Beam Strength Multiplier", 1f,
|
||||
new ConfigDescription("Beam Strength Multiplier", new AcceptableValueRange<float>(min, max)));
|
||||
beamStrengthMultiplier.SettingChanged += (sender, args) => DoPatch();
|
||||
|
||||
beamHeightIncrementScaleMultiplier =
|
||||
config.Bind("Item Holder", "Beam Height Increment Scale Multiplier", 1f,
|
||||
new ConfigDescription("Beam Height Increment Scale Multiplier",
|
||||
new AcceptableValueRange<float>(min, max)));
|
||||
beamHeightIncrementScaleMultiplier.SettingChanged += (sender, args) => DoPatch();
|
||||
|
||||
beamPickupRangeMultiplier = config.Bind(
|
||||
"Item Holder", "Beam Pickup Range Multiplier", 1f,
|
||||
new ConfigDescription("Beam Pickup Range Multiplier", new AcceptableValueRange<float>(min, max)));
|
||||
beamPickupRangeMultiplier.SettingChanged += (sender, args) => DoPatch();
|
||||
|
||||
magnetStrengthMultiplier = config.Bind(
|
||||
"Item Holder", "Magnet Strength Multiplier", 1f,
|
||||
new ConfigDescription("Magnet Strength Multiplier", new AcceptableValueRange<float>(min, max)));
|
||||
magnetStrengthMultiplier.SettingChanged += (sender, args) => DoPatch();
|
||||
|
||||
magnetPickupRangeMultiplier = config.Bind(
|
||||
"Item Holder", "Magnet Pickup Range Multiplier", 1f,
|
||||
new ConfigDescription("Magnet Pickup Range Multiplier", new AcceptableValueRange<float>(min, max)));
|
||||
magnetPickupRangeMultiplier.SettingChanged += (sender, args) => DoPatch();
|
||||
}
|
||||
|
||||
private static void ConfigureBeam(MultipliedObject<ModuleItemHolder> obj) {
|
||||
obj.AddField(new FieldConfiguration<int>("m_CapacityPerStack", capacityPerStackMultiplier));
|
||||
}
|
||||
|
||||
private static void ConfigureBeamHolder(MultipliedObject<ModuleItemHolderBeam> obj) {
|
||||
obj.AddField(new FieldConfiguration<float>("m_BeamStrength", beamStrengthMultiplier));
|
||||
obj.AddField(new FieldConfiguration<float>("m_HeightIncrementScale", beamHeightIncrementScaleMultiplier));
|
||||
}
|
||||
|
||||
private static void ConfigureBeamPickup(MultipliedObject<ModuleItemPickup> obj) {
|
||||
obj.AddField(new FieldConfiguration<float>("m_PickupRange", beamPickupRangeMultiplier));
|
||||
}
|
||||
|
||||
private static void ConfigureMagnetHolder(MultipliedObject<ModuleItemHolderMagnet> obj) {
|
||||
obj.AddField(new FieldConfiguration<float>("m_Strength", magnetStrengthMultiplier));
|
||||
}
|
||||
|
||||
private static void ConfigureMagnetPickup(MultipliedObject<ModuleItemPickup> obj) {
|
||||
obj.AddField(new FieldConfiguration<float>("m_PickupRange", magnetPickupRangeMultiplier));
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(ModuleItemHolder), "OnAttached")]
|
||||
static void PostfixCreate(ModuleItemHolder __instance) {
|
||||
beamManager.OnObjectAttached(__instance);
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(ModuleItemHolder), "OnDetaching")]
|
||||
static void PostfixDestroy(ModuleItemHolder __instance) {
|
||||
beamManager.OnObjectDetached(__instance);
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(ModuleItemHolderBeam), "OnAttached")]
|
||||
static void PostfixCreate(ModuleItemHolderBeam __instance) {
|
||||
var trav = Traverse.Create(__instance);
|
||||
var pickup = trav.Field("m_Pickup").GetValue<ModuleItemPickup>();
|
||||
|
||||
beamHolderManager.OnObjectAttached(__instance);
|
||||
beamPickupManager.OnObjectAttached(pickup);
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(ModuleItemHolderBeam), "OnDetaching")]
|
||||
static void PostfixDestroy(ModuleItemHolderBeam __instance) {
|
||||
var trav = Traverse.Create(__instance);
|
||||
var pickup = trav.Field("m_Pickup").GetValue<ModuleItemPickup>();
|
||||
|
||||
beamHolderManager.OnObjectDetached(__instance);
|
||||
beamPickupManager.OnObjectDetached(pickup);
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(ModuleItemHolderMagnet), "OnAttached")]
|
||||
static void PostfixCreate(ModuleItemHolderMagnet __instance) {
|
||||
var trav = Traverse.Create(__instance);
|
||||
var pickup = trav.Field("m_Pickup").GetValue<ModuleItemPickup>();
|
||||
|
||||
magnetHolderManager.OnObjectAttached(__instance);
|
||||
magnetPickupManager.OnObjectAttached(pickup);
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(ModuleItemHolderMagnet), "OnDetaching")]
|
||||
static void PostfixDestroy(ModuleItemHolderMagnet __instance) {
|
||||
var trav = Traverse.Create(__instance);
|
||||
var pickup = trav.Field("m_Pickup").GetValue<ModuleItemPickup>();
|
||||
|
||||
magnetHolderManager.OnObjectDetached(__instance);
|
||||
magnetPickupManager.OnObjectDetached(pickup);
|
||||
}
|
||||
|
||||
public static void DoPatch() {
|
||||
beamManager.ApplyAll();
|
||||
beamHolderManager.ApplyAll();
|
||||
beamPickupManager.ApplyAll();
|
||||
magnetHolderManager.ApplyAll();
|
||||
magnetPickupManager.ApplyAll();
|
||||
}
|
||||
}
|
||||
}
|
@@ -49,6 +49,7 @@
|
||||
<Compile Include="ModuleEnergyManager.cs" />
|
||||
<Compile Include="ModuleEnergyStoreManager.cs" />
|
||||
<Compile Include="ModuleGyroManager.cs" />
|
||||
<Compile Include="ModuleItemHolderManager.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="0Harmony">
|
||||
|
Reference in New Issue
Block a user