Skip to content

Commit

Permalink
Merge branch 'release/1.4.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
dbent committed Jun 11, 2016
2 parents a840cf4 + fa5adb5 commit 658ca88
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 44 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
## v1.4.1
##### Changed
- Use `UI_Cycle` attribute for more stock-like context menu item.

##### Fixed
- Fixed some annoying NullReferenceExceptions.

## v1.4.0
##### Changed
- Context menu items have been consolidated into a single item that shows current control mode and allows you to toggle
Expand Down
95 changes: 51 additions & 44 deletions src/PlaneMode/ModulePlaneMode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,17 @@ public sealed class ModulePlaneMode : PartModule
{
private const string ControlModeNodeKey = "controlMode";

private BaseEvent _toggleControlModeEvent;

public ControlMode ControlMode { get; private set; } = ControlMode.Rocket;

[KSPField(guiActive = true, guiActiveEditor = true, guiName = "Control Mode", isPersistant = true)]
[UI_Cycle(
affectSymCounterparts = UI_Scene.None,
controlEnabled = true,
scene = UI_Scene.All,
stateNames = new[] { "Rocket", "Plane" }
)]
private int _controlMode = -1;

public override void OnLoad(ConfigNode node)
{
Log.Trace("Entering ModulePlaneMode.OnLoad()");
Expand Down Expand Up @@ -38,20 +45,6 @@ public override void OnSave(ConfigNode node)
Log.Trace("Leaving ModulePlaneMode.OnSave()");
}

public override void OnAwake()
{
Log.Trace("Entering ModulePlaneMode.OnAwake()");

_toggleControlModeEvent = Events.Find(i => i.name == "ToggleControlMode");

if (_toggleControlModeEvent != null)
Log.Debug($"Found ToggleControlMode event for part {part.partInfo.title}");
else
Log.Warning($"Could not find ToggleControlMode event for part {part.partInfo.title}");

Log.Trace("Leaving ModulePlaneMode.OnAwake()");
}

public override void OnStart(StartState state)
{
Log.Trace("Entering ModulePlaneMode.OnStart()");
Expand Down Expand Up @@ -112,38 +105,19 @@ public override void OnStart(StartState state)
break;
}

UpdateToggleControlModeGuiName();

Log.Trace("Leaving ModulePlaneMode.OnStart()");
}

[KSPEvent(
guiName = "Toggle Control Mode",
name = "PlaneMode.ModulePlaneMode.ToggleControlMode",
guiActive = true,
guiActiveEditor = true
)]
public void ToggleControlMode()
{
Log.Trace("Entering ModulePlaneMode.ToggleControlMode()");

switch(ControlMode)
switch (ControlMode)
{
case ControlMode.Rocket:
ControlMode = ControlMode.Plane;
_controlMode = 0;
break;
case ControlMode.Plane:
ControlMode = ControlMode.Rocket;
_controlMode = 1;
break;
default:
ControlMode = ControlMode.Rocket;
break;
throw new ArgumentOutOfRangeException();
}

UpdateToggleControlModeGuiName();

Log.Info($"Toggled control mode for {part.partInfo.title} to {ControlMode}");
Log.Trace("Leaving ModulePlaneMode.ToggleControlMode()");
Log.Trace("Leaving ModulePlaneMode.OnStart()");
}

[KSPAction("Control Mode: Toggle")]
Expand All @@ -164,6 +138,24 @@ public void ActionSetPlaneControlMode(KSPActionParam p)
SetControlMode(ControlMode.Plane);
}

public void FixedUpdate()
{
switch (_controlMode)
{
case 0:
if (ControlMode != ControlMode.Rocket)
SetControlMode(ControlMode.Rocket);
break;
case 1:
if (ControlMode != ControlMode.Plane)
SetControlMode(ControlMode.Plane);
break;
default:
Log.Warning($"Invalid {nameof(_controlMode)}: {_controlMode}");
break;
}
}

public void SetControlMode(ControlMode controlMode)
{
Log.Trace("Entering ModulePlaneMode.SetControlMode()");
Expand All @@ -174,10 +166,25 @@ public void SetControlMode(ControlMode controlMode)
Log.Trace("Leaving ModulePlaneMode.SetControlMode()");
}

private void UpdateToggleControlModeGuiName()
public void ToggleControlMode()
{
if (_toggleControlModeEvent != null)
_toggleControlModeEvent.guiName = $"Control Mode: {ControlMode}";
Log.Trace("Entering ModulePlaneMode.ToggleControlMode()");

switch (ControlMode)
{
case ControlMode.Rocket:
ControlMode = ControlMode.Plane;
break;
case ControlMode.Plane:
ControlMode = ControlMode.Rocket;
break;
default:
ControlMode = ControlMode.Rocket;
break;
}

Log.Info($"Toggled control mode for {part.partInfo.title} to {ControlMode}");
Log.Trace("Leaving ModulePlaneMode.ToggleControlMode()");
}

// ReSharper disable once UnusedMethodReturnValue.Local
Expand All @@ -188,7 +195,7 @@ private static bool TryParseControlMode(string s, out ControlMode result)
byte b;
if (byte.TryParse(s, out b) && Enum.IsDefined(typeof(ControlMode), b))
{
result = (ControlMode)b;
result = (ControlMode) b;
return true;
}
else
Expand Down

0 comments on commit 658ca88

Please sign in to comment.