Skip to content

Commit ffd17ac

Browse files
committed
Try special handling for ModuleFuelTanks
1 parent 6fd0ca8 commit ffd17ac

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

B9PartSwitch/PartSwitch/ModuleModifierInfo.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ public IEnumerable<IPartModifier> CreatePartModifiers(Part part, PartModule pare
135135
yield return new ModuleOutputResourceResetter(module);
136136
yield return new ModuleDataHandlerBasic(module, originalNode, dataNode);
137137
}
138+
else if (moduleName == "ModuleFuelTanks") {
139+
yield return new ModuleFuelTanksHandler(module, originalNode, dataNode);
140+
}
138141
else
139142
yield return new ModuleDataHandlerBasic(module, originalNode, dataNode);
140143
}

B9PartSwitch/PartSwitch/PartModifiers/ModuleDataHandlerBasic.cs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Reflection;
23

34
namespace B9PartSwitch.PartSwitch.PartModifiers
45
{
@@ -31,7 +32,39 @@ public ModuleDataHandlerBasic(PartModule module, ConfigNode originalNode, Config
3132
public override void OnWasCopiedActiveSubtype() => Activate();
3233
public override void OnBeforeReinitializeActiveSubtype() => Deactivate();
3334

34-
private void Activate() => module.Load(dataNode);
35-
private void Deactivate() => module.Load(originalNode);
35+
protected virtual void Activate() => module.Load(dataNode);
36+
protected virtual void Deactivate() => module.Load(originalNode);
37+
}
38+
39+
public class ModuleFuelTanksHandler : ModuleDataHandlerBasic
40+
{
41+
public ModuleFuelTanksHandler(
42+
PartModule module, ConfigNode originalNode, ConfigNode dataNode
43+
) : base(module, originalNode, dataNode)
44+
{ }
45+
46+
protected override void Activate() => applyNode(dataNode);
47+
protected override void Deactivate() => applyNode(originalNode);
48+
49+
private void applyNode(ConfigNode sourceNode) {
50+
double volume = 0;
51+
bool setsVolume = sourceNode.TryGetValue("volume", ref volume);
52+
string type = null;
53+
bool setsType = sourceNode.TryGetValue("type", ref type);
54+
55+
if (setsVolume) {
56+
Type ModuleFuelTanks = module.GetType();
57+
FieldInfo volumeField = ModuleFuelTanks.GetField("volume");
58+
double curVolume = (double)volumeField.GetValue(module);
59+
if (volume != curVolume) {
60+
MethodInfo changeVolume = ModuleFuelTanks.GetMethod("ChangeVolume");
61+
changeVolume.Invoke(module, new object[]{ volume });
62+
}
63+
}
64+
if (setsType) {
65+
module.Fields.SetValue("type", type);
66+
}
67+
}
3668
}
3769
}
70+

0 commit comments

Comments
 (0)