diff --git a/Projects/TerraTech/TerraTech/ModuleEnergyManager.cs b/Projects/TerraTech/TerraTech/ModuleEnergyManager.cs index 22406f4..50a7b8f 100644 --- a/Projects/TerraTech/TerraTech/ModuleEnergyManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleEnergyManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -7,6 +8,7 @@ namespace TerraTech { private static readonly MultipliedObjectManager manager = new MultipliedObjectManager(ConfigureModuleEnergy); + public static ConfigEntry playerOnly; public static ConfigEntry outputMultiplier; public static ConfigEntry powerUpDelayMultiplier; @@ -14,6 +16,9 @@ namespace TerraTech { 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))); @@ -26,10 +31,16 @@ namespace TerraTech { } private static void ConfigureModuleEnergy(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_OutputPerSecond", outputMultiplier)); - obj.AddField(new FieldConfiguration("m_PowerUpDelay", powerUpDelayMultiplier)); + 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), "OnAttached")] static void PostfixCreate(ModuleEnergy __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleEnergyStoreManager.cs b/Projects/TerraTech/TerraTech/ModuleEnergyStoreManager.cs index 980dc5d..90535b2 100644 --- a/Projects/TerraTech/TerraTech/ModuleEnergyStoreManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleEnergyStoreManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -7,12 +8,16 @@ namespace TerraTech { private static readonly MultipliedObjectManager manager = new MultipliedObjectManager(ConfigureModuleEnergyStore); + public static ConfigEntry playerOnly; public static ConfigEntry capacityMultiplier; 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(); + capacityMultiplier = config.Bind("Energy", "Capacity Multiplier", 1f, new ConfigDescription("Capacity Multiplier", new AcceptableValueRange(min, max))); @@ -20,9 +25,15 @@ namespace TerraTech { } private static void ConfigureModuleEnergyStore(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_Capacity", capacityMultiplier)); + obj.AddField(new FieldConfiguration("m_Capacity", capacityMultiplier, ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleEnergyStore), "OnAttached")] static void PostfixCreate(ModuleEnergyStore __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleGyroManager.cs b/Projects/TerraTech/TerraTech/ModuleGyroManager.cs index 07ad3aa..9d412a8 100644 --- a/Projects/TerraTech/TerraTech/ModuleGyroManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleGyroManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -7,12 +8,16 @@ namespace TerraTech { private static readonly MultipliedObjectManager manager = new MultipliedObjectManager(ConfigureModuleGyro); + public static ConfigEntry playerOnly; public static ConfigEntry activeSpeedMultiplier; public static void Setup(ConfigFile config) { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("Gyro", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + activeSpeedMultiplier = config.Bind( "Gyro", "Active Speed Multiplier", 1f, new ConfigDescription("Active Speed Multiplier", new AcceptableValueRange(min, max))); @@ -20,9 +25,15 @@ namespace TerraTech { } private static void ConfigureModuleGyro(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_ActiveSpeed", activeSpeedMultiplier)); + obj.AddField(new FieldConfiguration("m_ActiveSpeed", activeSpeedMultiplier, ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleGyro), "OnAttached")] static void PostfixCreate(ModuleGyro __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs b/Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs index 6836642..f556f74 100644 --- a/Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleItemHolderManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -16,6 +17,7 @@ namespace TerraTech { private static readonly MultipliedObjectManager magnetPickupManager = new MultipliedObjectManager(ConfigureMagnetPickup); + public static ConfigEntry playerOnly; public static ConfigEntry capacityPerStackMultiplier; public static ConfigEntry beamStrengthMultiplier; public static ConfigEntry beamHeightIncrementScaleMultiplier; @@ -27,6 +29,9 @@ namespace TerraTech { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("Item Holder", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + capacityPerStackMultiplier = config.Bind( "Item Holder", "Capacity Per Stack Multiplier", 1f, new ConfigDescription("Capacity Per Stack Multiplier", new AcceptableValueRange(min, max))); @@ -60,27 +65,35 @@ namespace TerraTech { } private static void ConfigureBeam(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_CapacityPerStack", capacityPerStackMultiplier)); + obj.AddField( + new FieldConfiguration("m_CapacityPerStack", capacityPerStackMultiplier, ShouldApply)); } private static void ConfigureBeamHolder(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_BeamStrength", beamStrengthMultiplier)); - obj.AddField( - new FieldConfiguration("m_HeightIncrementScale", beamHeightIncrementScaleMultiplier)); + obj.AddField(new FieldConfiguration("m_BeamStrength", beamStrengthMultiplier, ShouldApply)); + obj.AddField(new FieldConfiguration("m_HeightIncrementScale", + beamHeightIncrementScaleMultiplier, ShouldApply)); } private static void ConfigureBeamPickup(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_PickupRange", beamPickupRangeMultiplier)); + obj.AddField(new FieldConfiguration("m_PickupRange", beamPickupRangeMultiplier, ShouldApply)); } private static void ConfigureMagnetHolder(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_Strength", magnetStrengthMultiplier)); + obj.AddField(new FieldConfiguration("m_Strength", magnetStrengthMultiplier, ShouldApply)); } private static void ConfigureMagnetPickup(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_PickupRange", magnetPickupRangeMultiplier)); + obj.AddField( + new FieldConfiguration("m_PickupRange", magnetPickupRangeMultiplier, ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleItemHolder), "OnAttached")] static void PostfixCreate(ModuleItemHolder __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleItemProducerManager.cs b/Projects/TerraTech/TerraTech/ModuleItemProducerManager.cs index e0c7e35..4ace088 100644 --- a/Projects/TerraTech/TerraTech/ModuleItemProducerManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleItemProducerManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -7,6 +8,7 @@ namespace TerraTech { private static readonly MultipliedObjectManager manager = new MultipliedObjectManager(ConfigureModuleItemProducer); + public static ConfigEntry playerOnly; public static ConfigEntry resourceGroundRadiusMultiplier; public static ConfigEntry minDispenseIntervalMultiplier; public static ConfigEntry secPerItemProducedMultiplier; @@ -15,6 +17,9 @@ namespace TerraTech { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("Item Producer", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + resourceGroundRadiusMultiplier = config.Bind( "Item Producer", "Resource Ground Radius Multiplier", 1f, new ConfigDescription("Resource Ground Radius Multiplier", new AcceptableValueRange(min, max))); @@ -32,12 +37,20 @@ namespace TerraTech { } private static void ConfigureModuleItemProducer(MultipliedObject obj) { - obj.AddField( - new FieldConfiguration("m_ResourceGroundRadius", resourceGroundRadiusMultiplier)); - obj.AddField(new FieldConfiguration("m_MinDispenseInterval", minDispenseIntervalMultiplier)); - obj.AddField(new FieldConfiguration("m_SecPerItemProduced", secPerItemProducedMultiplier)); + obj.AddField(new FieldConfiguration("m_ResourceGroundRadius", resourceGroundRadiusMultiplier, + ShouldApply)); + obj.AddField(new FieldConfiguration("m_MinDispenseInterval", minDispenseIntervalMultiplier, + ShouldApply)); + obj.AddField(new FieldConfiguration("m_SecPerItemProduced", secPerItemProducedMultiplier, + ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleItemProducer), "GetClosestResourceReservoirInRange")] static void PostfixCreate(ModuleItemProducer __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleRemoteChargerManager.cs b/Projects/TerraTech/TerraTech/ModuleRemoteChargerManager.cs index 435bced..a201395 100644 --- a/Projects/TerraTech/TerraTech/ModuleRemoteChargerManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleRemoteChargerManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -7,6 +8,7 @@ namespace TerraTech { private static readonly MultipliedObjectManager manager = new MultipliedObjectManager(ConfigureModuleRemoteCharger); + public static ConfigEntry playerOnly; public static ConfigEntry arcFiringIntervalMultiplier; public static ConfigEntry chargingRadiusMultiplier; public static ConfigEntry powerTransferPerArcMultiplier; @@ -15,6 +17,9 @@ namespace TerraTech { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("Remote Charger", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + arcFiringIntervalMultiplier = config.Bind( "Remote Charger", "Arc Firing Interval Multiplier", 1f, new ConfigDescription("Arc Firing Interval Multiplier", new AcceptableValueRange(min, max))); @@ -32,11 +37,20 @@ namespace TerraTech { } private static void ConfigureModuleRemoteCharger(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_ArcFiringInterval", arcFiringIntervalMultiplier)); - obj.AddField(new FieldConfiguration("m_ChargingRadius", chargingRadiusMultiplier)); - obj.AddField(new FieldConfiguration("m_PowerTransferPerArc", powerTransferPerArcMultiplier)); + obj.AddField( + new FieldConfiguration("m_ArcFiringInterval", arcFiringIntervalMultiplier, ShouldApply)); + obj.AddField( + new FieldConfiguration("m_ChargingRadius", chargingRadiusMultiplier, ShouldApply)); + obj.AddField(new FieldConfiguration("m_PowerTransferPerArc", powerTransferPerArcMultiplier, + ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleRemoteCharger), "OnAttached")] static void PostfixCreate(ModuleRemoteCharger __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleShieldGeneratorManager.cs b/Projects/TerraTech/TerraTech/ModuleShieldGeneratorManager.cs index bbf5a4a..cbd6936 100644 --- a/Projects/TerraTech/TerraTech/ModuleShieldGeneratorManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleShieldGeneratorManager.cs @@ -1,4 +1,5 @@ -using BepInEx.Configuration; +using System; +using BepInEx.Configuration; using HarmonyLib; namespace TerraTech { @@ -7,6 +8,7 @@ namespace TerraTech { private static readonly MultipliedObjectManager manager = new MultipliedObjectManager(ConfigureShieldGenerator); + public static ConfigEntry playerOnly; public static ConfigEntry radiusMultiplier; public static ConfigEntry radiusMultiplierHealing; public static ConfigEntry heartbeatIntervalMultiplier; @@ -16,6 +18,9 @@ namespace TerraTech { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("Shield", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + radiusMultiplier = config.Bind("Shield", "Radius Multiplier", 1f, new ConfigDescription("Radius Multiplier", new AcceptableValueRange(min, max))); @@ -38,17 +43,25 @@ namespace TerraTech { } private static void ConfigureShieldGenerator(MultipliedObject obj) { - obj.AddField( - new FieldConfiguration("m_HealingHeartbeatInterval", heartbeatIntervalMultiplier)); + obj.AddField(new FieldConfiguration("m_HealingHeartbeatInterval", heartbeatIntervalMultiplier, + ShouldApply)); obj.AddField(new FieldConfiguration("m_Radius", radiusMultiplier, instance => { + if (!ShouldApply(instance)) + return radiusMultiplier; var shield = (ModuleShieldGenerator)instance; return shield.m_Healing ? radiusMultiplierHealing : radiusMultiplier; })); - obj.AddField(new FieldConfiguration("m_PowerUpDelay", powerUpDelayMultiplier)); + 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(ModuleShieldGenerator), "OnAttached")] static void PostfixCreate(ModuleShieldGenerator __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleWeaponGunManager.cs b/Projects/TerraTech/TerraTech/ModuleWeaponGunManager.cs index d853031..b1837f4 100644 --- a/Projects/TerraTech/TerraTech/ModuleWeaponGunManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleWeaponGunManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -9,6 +10,7 @@ namespace TerraTech { private static readonly MultipliedObjectManager fireDataManager = new MultipliedObjectManager(ConfigureFireData); + public static ConfigEntry playerOnly; public static ConfigEntry kickbackStrengthMultiplier; public static ConfigEntry muzzleVelocityMultiplier; public static ConfigEntry burstCooldownMultiplier; @@ -21,6 +23,9 @@ namespace TerraTech { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("WeaponGun", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + kickbackStrengthMultiplier = config.Bind( "FireData", "Kickback Strength Multiplier", 1f, new ConfigDescription("Kickback Strength Multiplier", new AcceptableValueRange(min, max))); @@ -58,18 +63,27 @@ namespace TerraTech { } private static void ConfigureManager(MultipliedObject obj) { - obj.AddBooleanField(new BooleanFieldConfiguration("m_SeekingRounds", seekingRoundsAll)); - obj.AddBooleanField(new BooleanFieldConfiguration("m_ResetBurstOnInterrupt", resetBurstOnInterruptAll)); - obj.AddField(new FieldConfiguration("m_BurstCooldown", burstCooldownMultiplier)); - obj.AddField(new FieldConfiguration("m_BurstShotCount", burstShotCountMultiplier)); - obj.AddField(new FieldConfiguration("m_ShotCooldown", shotCooldownMultiplier)); + obj.AddBooleanField(new BooleanFieldConfiguration("m_SeekingRounds", seekingRoundsAll, ShouldApply)); + obj.AddBooleanField( + new BooleanFieldConfiguration("m_ResetBurstOnInterrupt", resetBurstOnInterruptAll, ShouldApply)); + obj.AddField(new FieldConfiguration("m_BurstCooldown", burstCooldownMultiplier, ShouldApply)); + obj.AddField(new FieldConfiguration("m_BurstShotCount", burstShotCountMultiplier, ShouldApply)); + obj.AddField(new FieldConfiguration("m_ShotCooldown", shotCooldownMultiplier, ShouldApply)); } private static void ConfigureFireData(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_MuzzleVelocity", muzzleVelocityMultiplier)); - obj.AddField(new FieldConfiguration("m_KickbackStrength", kickbackStrengthMultiplier)); + obj.AddField( + new FieldConfiguration("m_MuzzleVelocity", muzzleVelocityMultiplier, ShouldApply)); + obj.AddField( + new FieldConfiguration("m_KickbackStrength", kickbackStrengthMultiplier, ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleWeaponGun), "OnAttached")] static void PostfixCreate(ModuleWeaponGun __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleWeaponManager.cs b/Projects/TerraTech/TerraTech/ModuleWeaponManager.cs index 8802d94..29212fd 100644 --- a/Projects/TerraTech/TerraTech/ModuleWeaponManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleWeaponManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -7,12 +8,16 @@ namespace TerraTech { private static readonly MultipliedObjectManager manager = new MultipliedObjectManager(ConfigureManager); + public static ConfigEntry playerOnly; public static ConfigEntry rotateSpeedMultiplier; public static void Setup(ConfigFile config) { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("ModuleWeapon", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + rotateSpeedMultiplier = config.Bind( "ModuleWeapon", "Rotate Speed Multiplier", 1f, new ConfigDescription("Rotate Speed Multiplier", new AcceptableValueRange(min, max))); @@ -20,9 +25,15 @@ namespace TerraTech { } private static void ConfigureManager(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("m_RotateSpeed", rotateSpeedMultiplier)); + obj.AddField(new FieldConfiguration("m_RotateSpeed", rotateSpeedMultiplier, ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleWeapon), "OnAttached")] static void PostfixCreate(ModuleWeapon __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleWheelsManager.cs b/Projects/TerraTech/TerraTech/ModuleWheelsManager.cs index c7c736c..b4eab7d 100644 --- a/Projects/TerraTech/TerraTech/ModuleWheelsManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleWheelsManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -7,6 +8,7 @@ namespace TerraTech { private static readonly MultipliedObjectManager torqueParamsManager = new MultipliedObjectManager(ConfigureTorqueParams); + public static ConfigEntry playerOnly; public static ConfigEntry torqueRpmMultiplier; public static ConfigEntry torqueMultiplier; @@ -14,6 +16,9 @@ namespace TerraTech { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("TorqueParams", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + torqueRpmMultiplier = config.Bind("TorqueParams", "Torque RPM Multiplier", 1f, new ConfigDescription("Torque RPM Multiplier", new AcceptableValueRange(min, max))); @@ -26,10 +31,16 @@ namespace TerraTech { } private static void ConfigureTorqueParams(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("torqueCurveMaxRpm", torqueRpmMultiplier)); - obj.AddField(new FieldConfiguration("torqueCurveMaxTorque", torqueMultiplier)); + obj.AddField(new FieldConfiguration("torqueCurveMaxRpm", torqueRpmMultiplier, ShouldApply)); + obj.AddField(new FieldConfiguration("torqueCurveMaxTorque", torqueMultiplier, ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleWheels), "OnAttached")] static void PostfixCreate(ModuleWheels __instance) { diff --git a/Projects/TerraTech/TerraTech/ModuleWingManager.cs b/Projects/TerraTech/TerraTech/ModuleWingManager.cs index fe06c1a..7e29e58 100644 --- a/Projects/TerraTech/TerraTech/ModuleWingManager.cs +++ b/Projects/TerraTech/TerraTech/ModuleWingManager.cs @@ -1,3 +1,4 @@ +using System; using BepInEx.Configuration; using HarmonyLib; @@ -7,6 +8,7 @@ namespace TerraTech { private static readonly MultipliedObjectManager manager = new MultipliedObjectManager(ConfigureAerofoil); + public static ConfigEntry playerOnly; public static ConfigEntry angleRangeMultiplier; public static ConfigEntry turnSpeedMultiplier; public static ConfigEntry liftStrengthMultiplier; @@ -15,6 +17,9 @@ namespace TerraTech { float min = 0.01f; float max = 32f; + playerOnly = config.Bind("Aerofoil", "Player Only", false, new ConfigDescription("Player Only")); + playerOnly.SettingChanged += (sender, args) => DoPatch(); + angleRangeMultiplier = config.Bind("Aerofoil", "Angle Range Multiplier", 1f, new ConfigDescription("Angle Range Multiplier", new AcceptableValueRange(min, max))); @@ -32,13 +37,21 @@ namespace TerraTech { } private static void ConfigureAerofoil(MultipliedObject obj) { - obj.AddField(new FieldConfiguration("flapAngleRangeActual", angleRangeMultiplier)); - obj.AddField(new FieldConfiguration("flapAngleRangeVisual", angleRangeMultiplier)); + obj.AddField( + new FieldConfiguration("flapAngleRangeActual", angleRangeMultiplier, ShouldApply)); + obj.AddField( + new FieldConfiguration("flapAngleRangeVisual", angleRangeMultiplier, ShouldApply)); - obj.AddField(new FieldConfiguration("flapTurnSpeed", turnSpeedMultiplier)); - obj.AddField(new FieldConfiguration("liftStrength", liftStrengthMultiplier)); + obj.AddField(new FieldConfiguration("flapTurnSpeed", turnSpeedMultiplier, ShouldApply)); + obj.AddField(new FieldConfiguration("liftStrength", liftStrengthMultiplier, ShouldApply)); } + private static readonly Func ShouldApply = obj => { + if (!playerOnly.Value) + return true; + return CykUtil.IsPlayerTank(obj as Module); + }; + [HarmonyPrefix] [HarmonyPatch(typeof(ModuleWing), "OnAttached")] static void PostfixCreate(ModuleWing __instance) { diff --git a/Projects/TerraTech/TerraTech/TerraTech.csproj b/Projects/TerraTech/TerraTech/TerraTech.csproj index cd825e4..ba5a471 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -70,6 +70,9 @@ $(GAME_MANAGED)/UnityEngine.CoreModule.dll + + $(GAME_MANAGED)/UnityEngine.Networking.dll + $(GAME_MANAGED)/Assembly-CSharp.dll