Generally implemented tracking of nearest valid relay even if out of range.
[AntennaRange.git] / ModuleLimitedDataTransmitter.cs
blob:a/ModuleLimitedDataTransmitter.cs -> blob:b/ModuleLimitedDataTransmitter.cs
--- a/ModuleLimitedDataTransmitter.cs
+++ b/ModuleLimitedDataTransmitter.cs
@@ -74,8 +74,11 @@
 		[KSPField(isPersistant = false)]
 		public float nominalRange;
 
+		[KSPField(isPersistant = false, guiActive = true, guiName = "Status")]
+		public string UIrelayStatus;
+
 		[KSPField(isPersistant = false, guiActive = true, guiName = "Relay")]
-		public string UIrelayStatus;
+		public string UIrelayTarget;
 
 		[KSPField(isPersistant = false, guiActive = true, guiName = "Transmission Distance")]
 		public string UItransmitDistance;
@@ -217,7 +220,26 @@
 		{
 			get
 			{
-				return this.relay.relayChecked;
+				if (this.relay != null)
+				{
+					return this.relay.relayChecked;
+				}
+
+				// If our relay is null, always return null so we're never checked.
+				return true;
+			}
+		}
+
+		public bool KerbinDirect
+		{
+			get
+			{
+				if (this.relay != null)
+				{
+					return this.relay.KerbinDirect;
+				}
+
+				return false;
 			}
 		}
 
@@ -405,7 +427,9 @@
 
 				message.Append("Beginning transmission ");
 
-				if (this.relay.nearestRelay == null)
+				// @DONE TODO: Fix this to fall back to Kerbin if nearestRelay cannot be contacted.
+				// @DONE TODO: Remove nearestRelay == null
+				if (this.KerbinDirect)
 				{
 					message.Append("directly to Kerbin.");
 				}
@@ -523,7 +547,9 @@
 
 				message.Append("Beginning transmission ");
 
-				if (this.relay.nearestRelay == null)
+				// @DONE TODO: Fix this to fall back to Kerbin if nearestRelay cannot be contacted.
+				// @DONE TODO: Remove nearestRelay == null
+				if (this.KerbinDirect)
 				{
 					message.Append("directly to Kerbin.");
 				}
@@ -549,7 +575,7 @@
 			{
 				if (this.CanTransmit())
 				{
-					this.UIrelayStatus = string.Intern("Connected");
+					this.UIrelayStatus = "Connected";
 					this.UItransmitDistance = Tools.MuMech_ToSI(this.transmitDistance) + "m";
 					this.UIpacketSize = Tools.MuMech_ToSI(this.DataRate) + "MiT";
 					this.UIpacketCost = Tools.MuMech_ToSI(this.DataResourceCost) + "E";
@@ -558,7 +584,7 @@
 				{
 					if (this.relay.firstOccludingBody == null)
 					{
-						this.UIrelayStatus = string.Intern("Out of range");
+						this.UIrelayStatus = "Out of range";
 					}
 					else
 					{
@@ -567,6 +593,15 @@
 					this.UImaxTransmitDistance = "N/A";
 					this.UIpacketSize = "N/A";
 					this.UIpacketCost = "N/A";
+				}
+
+				if (this.KerbinDirect)
+				{
+					this.UIrelayTarget = "Kerbin";
+				}
+				else
+				{
+					this.UIrelayTarget = this.relay.nearestRelay.ToString();
 				}
 			}
 		}