From ba6ebf6d078b2650b02999c3c36e286e3753b9c3 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Mon, 24 Feb 2025 09:01:10 +0100 Subject: [PATCH] Add aerofoil configuration multipliers and ModuleWingManager --- Projects/TerraTech/TerraTech/Class1.cs | 23 +++++++++++ .../TerraTech/TerraTech/ModuleWingManager.cs | 40 +++++++++++++++++++ Projects/TerraTech/TerraTech/TerraTech.csproj | 1 + 3 files changed, 64 insertions(+) create mode 100644 Projects/TerraTech/TerraTech/ModuleWingManager.cs diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index cc54e74..b13cdd8 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -45,6 +45,10 @@ namespace TerraTech { public static ConfigEntry shopBlocksGeneratedTotalMultiplier; public static ConfigEntry shopPerBlockStopMultiplier; + public static ConfigEntry aerofoilAngleRangeMultiplier; + public static ConfigEntry aerofoilAngleTurnSpeedMultiplier; + public static ConfigEntry aerofoilLiftStrengthMultiplier; + public static ConfigEntry shieldRadiusMultiplier; public static ConfigEntry shieldRadiusMultiplierHealing; public static ConfigEntry shieldHeartbeatIntervalMultiplier; @@ -71,16 +75,35 @@ namespace TerraTech { shieldRadiusMultiplier = Config.Bind( "Shield", "Shield Radius Multiplier", 1f, new ConfigDescription("Shield Radius Multiplier", new AcceptableValueRange(min, max))); + shieldRadiusMultiplier.SettingChanged += (sender, args) => ModuleShieldGeneratorManager.DoPatch(); shieldHeartbeatIntervalMultiplier = Config.Bind("Shield", "Shield Heartbeat Interval Multiplier", 1f, new ConfigDescription("Shield Heartbeat Interval Multiplier", new AcceptableValueRange(min, max))); + shieldHeartbeatIntervalMultiplier.SettingChanged += (sender, args) => + ModuleShieldGeneratorManager.DoPatch(); shieldPowerUpDelayMultiplier = Config.Bind( "Shield", "Shield Power Up Delay Multiplier", 1f, new ConfigDescription("Shield Power Up Delay Multiplier", new AcceptableValueRange(min, max))); + shieldPowerUpDelayMultiplier.SettingChanged += (sender, args) => ModuleShieldGeneratorManager.DoPatch(); shieldRadiusMultiplierHealing = Config.Bind( "Shield", "Shield Radius Multiplier Healing", 1f, new ConfigDescription("Shield Radius Multiplier Healing", new AcceptableValueRange(min, max))); + shieldRadiusMultiplierHealing.SettingChanged += (sender, args) => ModuleShieldGeneratorManager.DoPatch(); + + aerofoilAngleRangeMultiplier = Config.Bind( + "Aerofoil", "Aerofoil Angle Range Multiplier", 1f, + new ConfigDescription("Aerofoil Angle Range Multiplier", new AcceptableValueRange(min, max))); + aerofoilAngleRangeMultiplier.SettingChanged += (sender, args) => ModuleWingManager.DoPatch(); + aerofoilAngleTurnSpeedMultiplier = + Config.Bind("Aerofoil", "Aerofoil Angle Turn Speed Multiplier", 1f, + new ConfigDescription("Aerofoil Angle Turn Speed Multiplier", + new AcceptableValueRange(min, max))); + aerofoilAngleTurnSpeedMultiplier.SettingChanged += (sender, args) => ModuleWingManager.DoPatch(); + aerofoilLiftStrengthMultiplier = Config.Bind( + "Aerofoil", "Aerofoil Lift Strength Multiplier", 1f, + new ConfigDescription("Aerofoil Lift Strength Multiplier", new AcceptableValueRange(min, max))); + aerofoilLiftStrengthMultiplier.SettingChanged += (sender, args) => ModuleWingManager.DoPatch(); shootingSpeedMultiplier = Config.Bind( "Weapons", "Shooting Speed Multiplier", 1f, diff --git a/Projects/TerraTech/TerraTech/ModuleWingManager.cs b/Projects/TerraTech/TerraTech/ModuleWingManager.cs new file mode 100644 index 0000000..bb986cf --- /dev/null +++ b/Projects/TerraTech/TerraTech/ModuleWingManager.cs @@ -0,0 +1,40 @@ +using System; +using HarmonyLib; + +namespace TerraTech { + [HarmonyPatch] + public class ModuleWingManager { + private static readonly MultipliedObjectManager manager = + new MultipliedObjectManager(ConfigureAerofoil); + + private static void ConfigureAerofoil(MultipliedObject obj) { + obj.AddField(new FieldConfiguration("flipAngleRangeActual", Main.aerofoilAngleRangeMultiplier)); + obj.AddField(new FieldConfiguration("flipAngleRangeVisual", Main.aerofoilAngleRangeMultiplier)); + + obj.AddField(new FieldConfiguration("flipAngleTurnSpeed", Main.aerofoilAngleTurnSpeedMultiplier)); + obj.AddField(new FieldConfiguration("liftStrength", Main.aerofoilLiftStrengthMultiplier)); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleWing), "OnAttached")] + static void PostfixCreate(ModuleWing __instance) { + for (int i = 0; i < __instance.m_Aerofoils.Length; i++) { + var aerofoil = __instance.m_Aerofoils[i]; + manager.OnObjectAttached(aerofoil); + } + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ModuleWing), "OnDetaching")] + static void PostfixDestroy(ModuleWing __instance) { + for (int i = 0; i < __instance.m_Aerofoils.Length; i++) { + var aerofoil = __instance.m_Aerofoils[i]; + manager.OnObjectDetached(aerofoil); + } + } + + public static void DoPatch() { + manager.ApplyAll(); + } + } +} diff --git a/Projects/TerraTech/TerraTech/TerraTech.csproj b/Projects/TerraTech/TerraTech/TerraTech.csproj index d8f4dab..e78024d 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -43,6 +43,7 @@ +