diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index a230cfe..fbc80a2 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -9,6 +9,7 @@ using UnityEngine; // TODO: Make battery bigger // TODO: Make shield and repair bigger +// TODO: Make fuel tanks bigger namespace TerraTech { [BepInPlugin(pluginGuid, pluginName, pluginVersion)] @@ -29,28 +30,35 @@ namespace TerraTech { public static ConfigEntry beamStrenghtMultiplier; public static ConfigEntry beamRadiusMultiplier; public static ConfigEntry fuelTankRefillMultiplier; + public static ConfigEntry minerGroundArea; + public static ConfigEntry minerMiningSpeed; public void Awake() { xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, new ConfigDescription("XP Multiplier", new AcceptableValueRange(1f, 32f))); - moneyMultiplier = Config.Bind("General", "Money Multiplier", 1f, new ConfigDescription("Money Multiplier", new AcceptableValueRange(1f, 32f))); + moneyMultiplier = Config.Bind("General", "Money Multiplier", 1f, + new ConfigDescription("Money Multiplier", new AcceptableValueRange(1f, 32f))); energyGenMultiplier = Config.Bind("General", "Energy Generation Multiplier", 1f, new ConfigDescription("Energy Generation Multiplier", new AcceptableValueRange(1f, 64f))); heartbeatIntervalMultiplier = Config.Bind("General", "Heartbeat Interval Multiplier", 1f, new ConfigDescription("Heartbeat Interval Multiplier", new AcceptableValueRange(0.1f, 2f))); - shootingSpeedMultiplier = Config.Bind("General", "Shooting Speed Multiplier", 1f, + shootingSpeedMultiplier = Config.Bind("Weapons", "Shooting Speed Multiplier", 1f, new ConfigDescription("Shooting Speed Multiplier", new AcceptableValueRange(0.5f, 8f))); - muzzleVelocityMultiplier = Config.Bind("General", "Muzzle Velocity Multiplier", 1f, + muzzleVelocityMultiplier = Config.Bind("Weapons", "Muzzle Velocity Multiplier", 1f, new ConfigDescription("Muzzle Velocity Multiplier", new AcceptableValueRange(1f, 32f))); - magnetStrenghtMultiplier = Config.Bind("General", "Magnet Strength Multiplier", 1f, + magnetStrenghtMultiplier = Config.Bind("Attractors", "Magnet Strength Multiplier", 1f, new ConfigDescription("Magnet Strength Multiplier", new AcceptableValueRange(1f, 16f))); - magnetRadiusMultiplier = Config.Bind("General", "Magnet Radius Multiplier", 1f, + magnetRadiusMultiplier = Config.Bind("Attractors", "Magnet Radius Multiplier", 1f, new ConfigDescription("Magnet Radius Multiplier", new AcceptableValueRange(1f, 16f))); - beamStrenghtMultiplier = Config.Bind("General", "Beam Strength Multiplier", 1f, + beamStrenghtMultiplier = Config.Bind("Attractors", "Beam Strength Multiplier", 1f, new ConfigDescription("Beam Strength Multiplier", new AcceptableValueRange(1f, 16f))); - beamRadiusMultiplier = Config.Bind("General", "Beam Radius Multiplier", 1f, + beamRadiusMultiplier = Config.Bind("Attractors", "Beam Radius Multiplier", 1f, new ConfigDescription("Beam Radius Multiplier", new AcceptableValueRange(1f, 16f))); - beamRadiusMultiplier = Config.Bind("General", "Fuel Tank Refill Rate Multiplier", 1f, + fuelTankRefillMultiplier = Config.Bind("Propulsion", "Fuel Tank Refill Rate Multiplier", 1f, new ConfigDescription("Fuel Tank Refill Rate Multiplier", new AcceptableValueRange(1f, 32f))); + minerGroundArea = Config.Bind("Production", "Miner Ground Deposit Scan Area", 1f, + new ConfigDescription("Miner Ground Deposit Scan Area", new AcceptableValueRange(1f, 32f))); + minerMiningSpeed = Config.Bind("Production", "Miner Mining Speed", 1f, + new ConfigDescription("Miner Mining Speed", new AcceptableValueRange(1f, 32f))); allProjectilesHoming = Config.Bind("General", "Make All Projectiles Home", false); @@ -61,6 +69,8 @@ namespace TerraTech { beamStrenghtMultiplier.SettingChanged += (sender, args) => BeamPropertiesManager.DoPatch(); beamRadiusMultiplier.SettingChanged += (sender, args) => BeamPropertiesManager.DoPatch(); fuelTankRefillMultiplier.SettingChanged += (sender, args) => FuelPropertiesManager.DoPatch(); + minerGroundArea.SettingChanged += (sender, args) => MinerPropertiesManager.DoPatch(); + minerMiningSpeed.SettingChanged += (sender, args) => MinerPropertiesManager.DoPatch(); Logger.LogInfo("Cyka mod loaded"); HarmonyFileLog.Enabled = true; @@ -398,4 +408,87 @@ namespace TerraTech { } } } + + [HarmonyPatch] + public class MinerPropertiesManager { + private static Dictionary area = new Dictionary(); + private static Dictionary speed = new Dictionary(); + + [HarmonyPostfix] + [HarmonyPatch(typeof(ModuleItemProducer), "GetClosestResourceReservoirInRange")] + static void PostfixCreate(ModuleItemProducer __instance) { + // Console.WriteLine("ModuleItemProducer OnPool"); + if (!area.ContainsKey(__instance)) { + // Console.WriteLine("Is new ModuleItemProducer"); + area.Add(__instance, GetArea(__instance)); + speed.Add(__instance, GetSpeed(__instance)); + DoPatchSingle(__instance); + } else { + if (GetArea(__instance) == area[__instance]) { + DoPatchSingle(__instance); + } + if (GetSpeed(__instance) == speed[__instance]) { + DoPatchSingle(__instance); + } + } + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(ModuleItemProducer), "OnRecycle")] + static void PostfixDestroy(ModuleItemProducer __instance) { + // Console.WriteLine("ModuleItemProducer OnRecycle"); + DoRestoreSingle(__instance); + area.Remove(__instance); + speed.Remove(__instance); + } + + public static void DoPatch() { + // Console.WriteLine("Modifying " + generators.Count + " generators"); + // Console.WriteLine("Should patch: " + ShouldPatch()); + foreach (KeyValuePair keyValuePair in area) { + DoRestoreSingle(keyValuePair.Key); + DoPatchSingle(keyValuePair.Key); + } + } + + static void DoPatchSingle(ModuleItemProducer moduleItemProducer) { + // Console.WriteLine("Patching " + moduleItemProducer.name); + // Console.WriteLine("Old value " + GetArea(moduleItemProducer)); + // Console.WriteLine("Multiplier " + Main.minerGroundArea.Value); + SetArea(moduleItemProducer, area[moduleItemProducer] * Main.minerGroundArea.Value); + SetSpeed(moduleItemProducer, speed[moduleItemProducer] / Main.minerMiningSpeed.Value); + // Console.WriteLine("New value " + GetArea(moduleItemProducer)); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleItemProducer), "GetClosestResourceReservoirInRange")] + static void Test(ModuleItemProducer __instance) { + Console.WriteLine("" + GetArea(__instance)); + } + + static void DoRestoreSingle(ModuleItemProducer moduleItemProducer) { + if (area.ContainsKey(moduleItemProducer)) { + SetArea(moduleItemProducer, area[moduleItemProducer]); + } + if (speed.ContainsKey(moduleItemProducer)) { + SetSpeed(moduleItemProducer, speed[moduleItemProducer]); + } + } + + private static float GetArea(ModuleItemProducer moduleItemProducer) { + return Traverse.Create(moduleItemProducer).Field("m_ResourceGroundRadius").GetValue() as float? ?? 0f; + } + + private static void SetArea(ModuleItemProducer moduleItemProducer, float value) { + Traverse.Create(moduleItemProducer).Field("m_ResourceGroundRadius").SetValue(value); + } + + private static float GetSpeed(ModuleItemProducer moduleItemProducer) { + return Traverse.Create(moduleItemProducer).Field("m_SecPerItemProduced").GetValue() as float? ?? 0f; + } + + private static void SetSpeed(ModuleItemProducer moduleItemProducer, float value) { + Traverse.Create(moduleItemProducer).Field("m_SecPerItemProduced").SetValue(value); + } + } } \ No newline at end of file diff --git a/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.dll b/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.dll index 88a1909..9f1d5d4 100644 Binary files a/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.dll and b/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.dll differ diff --git a/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.pdb b/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.pdb index 76f5970..8e79d6c 100644 Binary files a/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.pdb and b/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.pdb differ diff --git a/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.dll b/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.dll index 88a1909..9f1d5d4 100644 Binary files a/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.dll and b/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.dll differ diff --git a/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.pdb b/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.pdb index 76f5970..8e79d6c 100644 Binary files a/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.pdb and b/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.pdb differ