From 31ec13b9f5eac112a745959aa5cea8b769d1712c Mon Sep 17 00:00:00 2001 From: Stonesmile <62522391+StonesmileGit@users.noreply.github.com> Date: Fri, 9 Sep 2022 21:23:36 +0200 Subject: [PATCH 1/4] Handle MFT volume change --- B9PartSwitch/B9PartSwitch.csproj | 3 +- B9PartSwitch/PartSwitch/ModuleModifierInfo.cs | 3 ++ .../PartModifiers/ModuleFuelTanksHandler.cs | 47 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs diff --git a/B9PartSwitch/B9PartSwitch.csproj b/B9PartSwitch/B9PartSwitch.csproj index c8d15c9..ac1233a 100644 --- a/B9PartSwitch/B9PartSwitch.csproj +++ b/B9PartSwitch/B9PartSwitch.csproj @@ -1,4 +1,4 @@ - + @@ -132,6 +132,7 @@ + diff --git a/B9PartSwitch/PartSwitch/ModuleModifierInfo.cs b/B9PartSwitch/PartSwitch/ModuleModifierInfo.cs index 99b3e6d..f7b131e 100644 --- a/B9PartSwitch/PartSwitch/ModuleModifierInfo.cs +++ b/B9PartSwitch/PartSwitch/ModuleModifierInfo.cs @@ -139,6 +139,9 @@ public IEnumerable CreatePartModifiers(Part part, PartModule pare yield return new ModuleOutputResourceResetter(module); yield return new ModuleDataHandlerBasic(module, originalNode, dataNode, moduleDataChangedEventDetails); } + else if (module.moduleName == "ModuleFuelTanks") { + yield return new ModuleFuelTanksHandler(module, originalNode, dataNode, moduleDataChangedEventDetails); + } else yield return new ModuleDataHandlerBasic(module, originalNode, dataNode, moduleDataChangedEventDetails); } diff --git a/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs new file mode 100644 index 0000000..e125606 --- /dev/null +++ b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs @@ -0,0 +1,47 @@ + +namespace B9PartSwitch.PartSwitch.PartModifiers +{ + public class ModuleFuelTanksHandler : PartModifierBase, IPartAspectLock + { + public const string PART_ASPECT_LOCK = "ModuleFuelTanks"; + + private readonly PartModule module; + private readonly ConfigNode originalNode; + private readonly ConfigNode dataNode; + private readonly BaseEventDetails moduleDataChangedEventDetails; + public ModuleFuelTanksHandler(PartModule module, ConfigNode originalNode, ConfigNode dataNode, BaseEventDetails moduleDataChangedEventDetails) + { + this.module = module; + this.originalNode = originalNode; + this.dataNode = dataNode; + this.moduleDataChangedEventDetails = moduleDataChangedEventDetails; + } + + public object PartAspectLock => PART_ASPECT_LOCK; + public override string Description => "blah, FIXME"; + public override void DeactivateOnStartEditor() => Deactivate(); + public override void ActivateOnStartEditor() => Activate(); + public override void DeactivateOnSwitchEditor() => Deactivate(); + public override void ActivateOnSwitchEditor() => Activate(); + public override void OnWillBeCopiedInactiveSubtype() => Activate(); + public override void OnWasCopiedInactiveSubtype() => Deactivate(); + public override void OnWasCopiedActiveSubtype() => Activate(); + public override void OnBeforeReinitializeInactiveSubtype() => Activate(); + + private void Activate() => ApplyNode(dataNode); + private void Deactivate() => ApplyNode(originalNode); + + private void ApplyNode(ConfigNode sourceNode) { + double volume = 0; + bool setsVolume = sourceNode.TryGetValue("volume", ref volume); + + if (setsVolume) { + var evtDetails = new BaseEventDetails(BaseEventDetails.Sender.USER); + evtDetails.Set("volName", "Tankage"); + evtDetails.Set("newTotalVolume", volume); + module.part.SendEvent("OnPartVolumeChanged", evtDetails, 0); + } + module.Events.Send("ModuleDataChanged", moduleDataChangedEventDetails); + } + } +} \ No newline at end of file From c499971dbe2d4d42acad5a54681a6f333abb52fd Mon Sep 17 00:00:00 2001 From: Stonesmile <62522391+StonesmileGit@users.noreply.github.com> Date: Thu, 27 Oct 2022 14:40:38 +0200 Subject: [PATCH 2/4] Only send event when data has changed --- .../PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs index e125606..09d220a 100644 --- a/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs +++ b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs @@ -40,8 +40,8 @@ private void ApplyNode(ConfigNode sourceNode) { evtDetails.Set("volName", "Tankage"); evtDetails.Set("newTotalVolume", volume); module.part.SendEvent("OnPartVolumeChanged", evtDetails, 0); + module.Events.Send("ModuleDataChanged", moduleDataChangedEventDetails); } - module.Events.Send("ModuleDataChanged", moduleDataChangedEventDetails); } } -} \ No newline at end of file +} From 89e5ea7c86d0a010d8dcf5a4770eb29d953c7933 Mon Sep 17 00:00:00 2001 From: Stonesmile <62522391+StonesmileGit@users.noreply.github.com> Date: Sun, 30 Oct 2022 11:04:48 +0100 Subject: [PATCH 3/4] Change to more proper Description --- B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs index 09d220a..9cc4568 100644 --- a/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs +++ b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs @@ -18,7 +18,7 @@ public ModuleFuelTanksHandler(PartModule module, ConfigNode originalNode, Config } public object PartAspectLock => PART_ASPECT_LOCK; - public override string Description => "blah, FIXME"; + public override string Description => "a part's ModuleFuelTanks"; public override void DeactivateOnStartEditor() => Deactivate(); public override void ActivateOnStartEditor() => Activate(); public override void DeactivateOnSwitchEditor() => Deactivate(); From 9f5088df114ae063fdcca00143a6321011b8c1ea Mon Sep 17 00:00:00 2001 From: Stonesmile <62522391+StonesmileGit@users.noreply.github.com> Date: Thu, 26 Jan 2023 20:19:31 +0100 Subject: [PATCH 4/4] Support everything on a MFT node --- .../PartModifiers/ModuleFuelTanksHandler.cs | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs index 9cc4568..ba2033c 100644 --- a/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs +++ b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs @@ -23,25 +23,16 @@ public ModuleFuelTanksHandler(PartModule module, ConfigNode originalNode, Config public override void ActivateOnStartEditor() => Activate(); public override void DeactivateOnSwitchEditor() => Deactivate(); public override void ActivateOnSwitchEditor() => Activate(); - public override void OnWillBeCopiedInactiveSubtype() => Activate(); - public override void OnWasCopiedInactiveSubtype() => Deactivate(); - public override void OnWasCopiedActiveSubtype() => Activate(); - public override void OnBeforeReinitializeInactiveSubtype() => Activate(); private void Activate() => ApplyNode(dataNode); private void Deactivate() => ApplyNode(originalNode); - private void ApplyNode(ConfigNode sourceNode) { - double volume = 0; - bool setsVolume = sourceNode.TryGetValue("volume", ref volume); - - if (setsVolume) { - var evtDetails = new BaseEventDetails(BaseEventDetails.Sender.USER); - evtDetails.Set("volName", "Tankage"); - evtDetails.Set("newTotalVolume", volume); - module.part.SendEvent("OnPartVolumeChanged", evtDetails, 0); - module.Events.Send("ModuleDataChanged", moduleDataChangedEventDetails); - } + private void ApplyNode(ConfigNode sourceNode) + { + var evtDetails = new BaseEventDetails(BaseEventDetails.Sender.USER); + evtDetails.Set("MFTNode", sourceNode); + module.Events.Send("LoadMFTModuleFromConfigNode", evtDetails); + module.Events.Send("ModuleDataChanged", moduleDataChangedEventDetails); } } }