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..ba2033c --- /dev/null +++ b/B9PartSwitch/PartSwitch/PartModifiers/ModuleFuelTanksHandler.cs @@ -0,0 +1,38 @@ + +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 => "a part's ModuleFuelTanks"; + public override void DeactivateOnStartEditor() => Deactivate(); + public override void ActivateOnStartEditor() => Activate(); + public override void DeactivateOnSwitchEditor() => Deactivate(); + public override void ActivateOnSwitchEditor() => Activate(); + + private void Activate() => ApplyNode(dataNode); + private void Deactivate() => ApplyNode(originalNode); + + 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); + } + } +}