From f97cd963604202515f6e93d55ed4474456bfcc60 Mon Sep 17 00:00:00 2001 From: JonnyOThan Date: Tue, 15 Oct 2024 10:32:29 -0400 Subject: [PATCH] Fix #3112 : disable KOSNameTag's update functions -these are obviously very tiny but considering every part gets one, that's a lot of no-op virtual calls --- src/kOS/Module/KOSNameTag.cs | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/kOS/Module/KOSNameTag.cs b/src/kOS/Module/KOSNameTag.cs index d24a9099d2..37234074f5 100644 --- a/src/kOS/Module/KOSNameTag.cs +++ b/src/kOS/Module/KOSNameTag.cs @@ -2,6 +2,7 @@ using kOS.Suffixed; using kOS.Safe.Utilities; using UnityEngine; +using System; namespace kOS.Module { @@ -61,6 +62,10 @@ public override void OnAwake() part.RemoveModule(pm); } } + + // make this module cheaper in update loops + isEnabled = false; + enabled = false; } public void TypingDone(string newValue) @@ -76,4 +81,39 @@ public void TypingCancel() typingWindow = null; } } + + // setting isEnabled to false prevents the nametag from showing up in the PAW...work around that. + [KSPAddon(KSPAddon.Startup.FlightAndEditor, false)] + class KOSNameTagActivationManager : MonoBehaviour + { + void Awake() + { + GameEvents.onPartActionUICreate.Add(OnPartActionUICreate); + GameEvents.onPartActionUIShown.Add(OnPartActionUIShown); + } + + void OnDestroy() + { + GameEvents.onPartActionUICreate.Remove(OnPartActionUICreate); + GameEvents.onPartActionUIShown.Remove(OnPartActionUIShown); + } + + private void OnPartActionUICreate(Part part) + { + var nameTagModule = part.FindModuleImplementing(); + if (nameTagModule != null) + { + nameTagModule.isEnabled = true; + } + } + + private void OnPartActionUIShown(UIPartActionWindow paw, Part part) + { + var nameTagModule = part.FindModuleImplementing(); + if (nameTagModule != null) + { + nameTagModule.isEnabled = false; + } + } + } } \ No newline at end of file