From 9e3e4fa367c7b29895d7c20555b4e215694aa60b Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Mon, 24 Feb 2025 22:06:00 +0100 Subject: [PATCH] Add projectile explode on stick configuration option --- Projects/TerraTech/TerraTech/Class1.cs | 4 ++++ .../TerraTech/TerraTech/ProjectilePatch.cs | 22 +++++++++++++++++++ .../TerraTech/SeekingProjectileManager.cs | 6 +++-- Projects/TerraTech/TerraTech/TerraTech.csproj | 1 + Projects/TerraTech/format.sh | 2 +- 5 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 Projects/TerraTech/TerraTech/ProjectilePatch.cs diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index 6049ca1..34bcb91 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -21,6 +21,7 @@ namespace TerraTech { public static ConfigEntry seekingProjectileVisionConeAngleMultiplier; public static ConfigEntry seekingProjectileVisionRangeMultiplier; public static ConfigEntry seekingProjectileTurningSpeedMultiplier; + public static ConfigEntry projectileExplodeOnStick; public void Awake() { debug = Config.Bind("General", "Debug", false); @@ -65,6 +66,9 @@ namespace TerraTech { Config.Bind("Weapons", "Seeking Projectile Turn Speed Multiplier", 1f, new ConfigDescription("Seeking Projectile Turn Speed Multiplier", new AcceptableValueRange(min, max))); + projectileExplodeOnStick = Config.Bind( + "Weapons", "Projectile Explode On Stick", false, + new ConfigDescription("Projectile Explode On Stick", new AcceptableValueRange(false, true))); Logger.LogInfo("Cyka mod loaded"); HarmonyFileLog.Enabled = true; diff --git a/Projects/TerraTech/TerraTech/ProjectilePatch.cs b/Projects/TerraTech/TerraTech/ProjectilePatch.cs new file mode 100644 index 0000000..fff4aaa --- /dev/null +++ b/Projects/TerraTech/TerraTech/ProjectilePatch.cs @@ -0,0 +1,22 @@ +using System; +using HarmonyLib; + +namespace TerraTech { + [HarmonyPatch] + public class ProjectilePatch { + [HarmonyPrefix] + [HarmonyPatch(typeof(Projectile), "StickToObjectWithVisuals")] + static void Prefix(Projectile __instance) { + if (Main.debug.Value) + Console.WriteLine("Projectile created"); + var trav = Traverse.Create(__instance); + var explodeOnStick = trav.Field("m_ExplodeOnStick"); + + if (!explodeOnStick.GetValue()) { + if (Main.debug.Value) + Console.WriteLine("Exploding on stick"); + explodeOnStick.SetValue(Main.projectileExplodeOnStick.Value); + } + } + } +} diff --git a/Projects/TerraTech/TerraTech/SeekingProjectileManager.cs b/Projects/TerraTech/TerraTech/SeekingProjectileManager.cs index 336c34a..07a6553 100644 --- a/Projects/TerraTech/TerraTech/SeekingProjectileManager.cs +++ b/Projects/TerraTech/TerraTech/SeekingProjectileManager.cs @@ -6,7 +6,9 @@ namespace TerraTech { [HarmonyPatch(typeof(SeekingProjectile), "OnSpawn")] class Patch { static void Postfix(SeekingProjectile __instance) { - Console.WriteLine("SeekingProjectile created"); + if (Main.debug.Value) + Console.WriteLine("SeekingProjectile created"); + SetField( __instance, "m_VisionConeAngle", Main.seekingProjectileVisionConeAngleMultiplier.Value * GetField(__instance, "m_VisionConeAngle")); @@ -25,4 +27,4 @@ namespace TerraTech { Traverse.Create(seekingProjectile).Field(field).SetValue(value); } } -} \ No newline at end of file +} diff --git a/Projects/TerraTech/TerraTech/TerraTech.csproj b/Projects/TerraTech/TerraTech/TerraTech.csproj index 0f23881..29556f0 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -58,6 +58,7 @@ + diff --git a/Projects/TerraTech/format.sh b/Projects/TerraTech/format.sh index a36993a..406fa8a 100644 --- a/Projects/TerraTech/format.sh +++ b/Projects/TerraTech/format.sh @@ -1 +1 @@ -wgo -dir TerraTech -debounce 1s echo "Formatters" :: clang-format -i TerraTech/*.cs +clang-format -i TerraTech/*.cs