diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index b13cdd8..570bf5d 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -54,6 +54,9 @@ namespace TerraTech { public static ConfigEntry shieldHeartbeatIntervalMultiplier; public static ConfigEntry shieldPowerUpDelayMultiplier; + public static ConfigEntry fireDataKickbackStrengthMultiplier; + public static ConfigEntry fireDataMuzzleVelocityMultiplier; + public void Awake() { debug = Config.Bind("General", "Debug", false); float min = 0.01f; @@ -105,6 +108,17 @@ namespace TerraTech { new ConfigDescription("Aerofoil Lift Strength Multiplier", new AcceptableValueRange(min, max))); aerofoilLiftStrengthMultiplier.SettingChanged += (sender, args) => ModuleWingManager.DoPatch(); + fireDataKickbackStrengthMultiplier = + Config.Bind("FireData", "Fire Data Kickback Strength Multiplier", 1f, + new ConfigDescription("Fire Data Kickback Strength Multiplier", + new AcceptableValueRange(min, max))); + fireDataKickbackStrengthMultiplier.SettingChanged += (sender, args) => FireDataManager.DoPatch(); + fireDataMuzzleVelocityMultiplier = + Config.Bind("FireData", "Fire Data Muzzle Velocity Multiplier", 1f, + new ConfigDescription("Fire Data Muzzle Velocity Multiplier", + new AcceptableValueRange(min, max))); + fireDataMuzzleVelocityMultiplier.SettingChanged += (sender, args) => FireDataManager.DoPatch(); + shootingSpeedMultiplier = Config.Bind( "Weapons", "Shooting Speed Multiplier", 1f, new ConfigDescription("Shooting Speed Multiplier", new AcceptableValueRange(min, max))); diff --git a/Projects/TerraTech/TerraTech/FireDataManager.cs b/Projects/TerraTech/TerraTech/FireDataManager.cs new file mode 100644 index 0000000..f0825d6 --- /dev/null +++ b/Projects/TerraTech/TerraTech/FireDataManager.cs @@ -0,0 +1,35 @@ +using System; +using HarmonyLib; + +namespace TerraTech { + [HarmonyPatch] + public class FireDataManager { + private static readonly MultipliedObjectManager manager = + new MultipliedObjectManager(ConfigureFireData); + + private static void ConfigureFireData(MultipliedObject obj) { + obj.AddField(new FieldConfiguration("m_MuzzleVelocity", Main.fireDataMuzzleVelocityMultiplier)); + obj.AddField(new FieldConfiguration("m_KickbackStrength", Main.fireDataKickbackStrengthMultiplier)); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleWeaponGun), "OnAttached")] + static void PostfixCreate(ModuleWeaponGun __instance) { + var trav = Traverse.Create(__instance); + var firingData = trav.Field("m_FireData"); + manager.OnObjectAttached(firingData.GetValue()); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleWeaponGun), "OnDetaching")] + static void PostfixDestroy(ModuleWeaponGun __instance) { + var trav = Traverse.Create(__instance); + var firingData = trav.Field("m_FireData"); + manager.OnObjectDetached(firingData.GetValue()); + } + + public static void DoPatch() { + manager.ApplyAll(); + } + } +} diff --git a/Projects/TerraTech/TerraTech/TerraTech.csproj b/Projects/TerraTech/TerraTech/TerraTech.csproj index e78024d..d94a32a 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -44,6 +44,7 @@ +