using System; using BepInEx.Configuration; using HarmonyLib; namespace BanquetForCyka { [HarmonyPatch] public class ModuleEnergyManager { private static readonly MultipliedObjectManager Manager = new MultipliedObjectManager(ConfigureModuleEnergy); private static ConfigEntry playerOnly; private static ConfigEntry outputMultiplier; private static ConfigEntry powerUpDelayMultiplier; public static void Setup(ConfigFile config) { float min = 0.01f; float max = 32f; playerOnly = config.Bind("Energy", "Player Only", false, new ConfigDescription("Player Only")); playerOnly.SettingChanged += (sender, args) => DoPatch(); outputMultiplier = config.Bind("Energy", "Output Multiplier", 1f, new ConfigDescription("Output Multiplier", new AcceptableValueRange(min, max))); outputMultiplier.SettingChanged += (sender, args) => DoPatch(); powerUpDelayMultiplier = config.Bind( "Energy", "Power Up Delay Multiplier", 1f, new ConfigDescription("Power Up Delay Multiplier", new AcceptableValueRange(min, max))); powerUpDelayMultiplier.SettingChanged += (sender, args) => DoPatch(); } private static void ConfigureModuleEnergy(MultipliedObject obj) { obj.AddField(new FieldConfiguration("m_OutputPerSecond", outputMultiplier, ShouldApply)); obj.AddField(new FieldConfiguration("m_PowerUpDelay", powerUpDelayMultiplier, ShouldApply)); } private static readonly Func ShouldApply = obj => { if (!playerOnly.Value) return true; return CykUtil.IsPlayerTank(obj as Module); }; [HarmonyPrefix] [HarmonyPatch(typeof(ModuleEnergy), "OnAnchorStatusChanged")] public static void PostfixCreate(ModuleEnergy __instance) { Manager.OnObjectAttached(__instance); } [HarmonyPrefix] [HarmonyPatch(typeof(ModuleEnergy), "OnDetaching")] public static void PostfixDestroy(ModuleEnergy __instance) { Manager.OnObjectDetached(__instance); } private static void DoPatch() { Manager.ApplyAll(); } public static readonly Func Register = obj => { if (Main.debug.Value) Console.WriteLine("Registering ModuleEnergy: {0}", obj); PostfixCreate(obj as ModuleEnergy); return true; }; } }