From 8774bc9ad85400222115e870bd9cfad28dd6aa78 Mon Sep 17 00:00:00 2001 From: Kari <70339502+Kari1407@users.noreply.github.com> Date: Sun, 23 Aug 2026 15:25:16 -0300 Subject: [PATCH] Add Module --- Source/KSPCommunityPartModules.csproj | 1 + Source/Modules/ModuleDecoupleAfterBurn.cs | 94 +++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 Source/Modules/ModuleDecoupleAfterBurn.cs diff --git a/Source/KSPCommunityPartModules.csproj b/Source/KSPCommunityPartModules.csproj index 9b8fd37..92e9215 100644 --- a/Source/KSPCommunityPartModules.csproj +++ b/Source/KSPCommunityPartModules.csproj @@ -36,6 +36,7 @@ + diff --git a/Source/Modules/ModuleDecoupleAfterBurn.cs b/Source/Modules/ModuleDecoupleAfterBurn.cs new file mode 100644 index 0000000..d35d358 --- /dev/null +++ b/Source/Modules/ModuleDecoupleAfterBurn.cs @@ -0,0 +1,94 @@ +/* + Usecase: Making a part wait for it's engine to burn out before decoupling + Example: BDB spin motors and DAXA's Epsilon spin table + Originally By: jsolson + Originally For: BluedogDesignBureau +*/ +using UnityEngine; +using System.Linq; +using System.Collections.Generic; + +namespace KSPCommunityPartModules +{ + class ModuleDecoupleAfterBurn : ModuleDecouple + { + [KSPField(guiActive = true, isPersistant = true, guiActiveEditor = true, guiName = "Auto Jettison"), UI_Toggle()] + public bool autoDecouple = true; + + private ModuleEngines engine; + private bool wasRunning = false; + + public override void OnStart(StartState state) + { + base.OnStart(state); + engine = part.FindModulesImplementing().FirstOrDefault(); + } + + public override void OnActive() + { + //base.OnActive(); + staged = true; + } + + public override void OnUpdate() + { + if (isDecoupled) + return; + if (engine == null) + return; + if (autoDecouple) + { + if (!wasRunning) + { + wasRunning = engine.GetCurrentThrust() > 0; + } + else + { + if (engine.GetCurrentThrust() <= 0) + Decouple(); + } + } + } + } + + class ModuleAnchoredDecoupleAfterBurn : ModuleAnchoredDecoupler + { + [KSPField(guiActive = true, isPersistant = true, guiActiveEditor = true, guiName = "Auto Jettison"), UI_Toggle()] + public bool autoDecouple = true; + + private ModuleEngines engine; + private bool wasRunning = false; + + public override void OnStart(StartState state) + { + base.OnStart(state); + engine = part.FindModulesImplementing().FirstOrDefault(); + } + + public override void OnActive() + { + //base.OnActive(); + staged = true; + } + + public override void OnUpdate() + { + if (isDecoupled) + return; + if (engine == null) + return; + if (autoDecouple) + { + if (!wasRunning) + { + wasRunning = engine.GetCurrentThrust() > 0; + } + else + { + if (engine.GetCurrentThrust() <= 0) + Decouple(); + } + } + } + } +}