Пример #1
0
        /// <summary>
        /// Determines if relayOne is in range of the specified relayTwo.
        /// </summary>
        /// <returns><c>true</c> if relayOne is in range of the specifie relayTwo; otherwise, <c>false</c>.</returns>
        /// <param name="relayOne">Relay one.</param>
        /// <param name="relayTwo">Relay two.</param>
        public static bool IsInRangeOf(this AntennaRelay relayOne, IAntennaRelay relayTwo)
        {
            if (relayOne == null || relayTwo == null)
            {
                return(false);
            }

            return(relayOne.SqrDistanceTo(relayTwo) <= relayOne.MaxLinkSqrDistanceTo(relayTwo));
        }
Пример #2
0
        /// <summary>
        /// Determines if relayOne is in range of the specified body.
        /// </summary>
        /// <returns><c>true</c> if relayOne is in range of the specified body; otherwise, <c>false</c>.</returns>
        /// <param name="relayOne">Relay one.</param>
        /// <param name="body">Body.</param>
        public static bool IsInRangeOf(this AntennaRelay relayOne, CelestialBody body)
        {
            if (relayOne == null || body == null)
            {
                return(false);
            }

            return(relayOne.SqrDistanceTo(body) <= relayOne.MaxLinkSqrDistanceTo(body));
        }
Пример #3
0
        public static void LogDebug(this AntennaRelay relay, string msg)
        {
            using (var sb = ToadicusTools.Text.PooledStringBuilder.Get())
            {
                sb.AppendFormat("[{0}] ", relay == null ? "NULL" : relay.ToString());
                sb.Append(msg);

                ToadicusTools.Logging.PostDebugMessage(sb.ToString());
            }
        }
Пример #4
0
 /// <summary>
 /// Returns the square of the maximum link range between two relays.
 /// </summary>
 /// <returns>The maximum link range between two relays.</returns>
 /// <param name="relayOne">Relay one.</param>
 /// <param name="relayTwo">Relay two.</param>
 public static double MaxLinkSqrDistanceTo(this AntennaRelay relayOne, IAntennaRelay relayTwo)
 {
     if (ARConfiguration.UseAdditiveRanges)
     {
         return(relayOne.maxTransmitDistance * relayTwo.maxTransmitDistance);
     }
     else
     {
         return(relayOne.maxTransmitDistance * relayOne.maxTransmitDistance);
     }
 }
Пример #5
0
        /// <summary>
        /// Returns the square of the maximum link range between a relay and Kerbin.
        /// </summary>
        /// <returns>The maximum link range between a relay and Kerbin.</returns>
        /// <param name="relayOne">Relay one.</param>
        /// <param name="body">A CelestialBody (must be Kerbin).</param>
        public static double MaxLinkSqrDistanceTo(this AntennaRelay relayOne, CelestialBody body)
        {
            if (body != AntennaRelay.Kerbin)
            {
                return(0d);
            }

            if (ARConfiguration.UseAdditiveRanges)
            {
                return(relayOne.maxTransmitDistance * ARConfiguration.KerbinRelayRange);
            }
            else
            {
                return(relayOne.maxTransmitDistance * relayOne.maxTransmitDistance);
            }
        }
        /// <summary>
        /// PartModule OnStart override; runs at Unity Start.
        /// </summary>
        /// <param name="state">State.</param>
        public override void OnStart(StartState state)
        {
            this.BaseLinkCost = new RelayDataCost(this.basePacketResourceCost, this.basePacketSize);
            this.RecalculateMaxRange();

            base.OnStart(state);

            if (state >= StartState.PreLaunch)
            {
                this.relay = new AntennaRelay(this);
                this.relay.nominalTransmitDistance = this.nominalTransmitDistance;
                this.relay.maxTransmitDistance     = this.maxTransmitDistance;

                this.UImaxTransmitDistance = TextTools.Format("{0:S3}m", this.maxTransmitDistance);

                GameEvents.onPartActionUICreate.Add(this.onPartActionUICreate);
                GameEvents.onPartActionUIDismiss.Add(this.onPartActionUIDismiss);
            }
        }
        /// <summary>
        /// PartModule OnStart override; runs at Unity Start.
        /// </summary>
        /// <param name="state">State.</param>
        public override void OnStart(StartState state)
        {
            this.BaseLinkCost = new RelayDataCost(this.basePacketResourceCost, this.basePacketSize);
            this.RecalculateMaxRange();

            base.OnStart (state);

            if (state >= StartState.PreLaunch)
            {
                this.relay = new AntennaRelay(this);
                this.relay.nominalTransmitDistance = this.nominalTransmitDistance;
                this.relay.maxTransmitDistance = this.maxTransmitDistance;

                this.UImaxTransmitDistance = TextTools.Format("{0:S3}m", this.maxTransmitDistance);

                GameEvents.onPartActionUICreate.Add(this.onPartActionUICreate);
                GameEvents.onPartActionUIDismiss.Add(this.onPartActionUIDismiss);
            }
        }
Пример #8
0
 /// <summary>
 /// Returns the distance between this IAntennaRelay and a CelestialBody
 /// </summary>
 /// <param name="relay">This <see cref="IAntennaRelay"/></param>
 /// <param name="body">A <see cref="CelestialBody"/></param>
 public static double DistanceTo(this AntennaRelay relay, CelestialBody body)
 {
     return(relay.vessel.DistanceTo(body) - body.Radius);
 }
Пример #9
0
 /// <summary>
 /// Returns the distance between this IAntennaRelay and a Vessel
 /// </summary>
 /// <param name="relay">This <see cref="IAntennaRelay"/></param>
 /// <param name="Vessel">A <see cref="Vessel"/></param>
 public static double DistanceTo(this AntennaRelay relay, Vessel Vessel)
 {
     return(relay.vessel.DistanceTo(Vessel));
 }
Пример #10
0
 /// <summary>
 /// Logs an error message on behalf of this relay
 /// </summary>
 public static void LogError(this AntennaRelay relay, string msg)
 {
     ToadicusTools.Logging.PostErrorMessage("[{0}] {1}", relay.ToString(), msg);
 }
Пример #11
0
 /// <summary>
 /// Logs an error message on behalf of this relay
 /// </summary>
 public static void LogError(this AntennaRelay relay, string format, params object[] args)
 {
     ToadicusTools.Logging.PostErrorMessage(string.Format("[{0}] {1}", relay.ToString(), format), args);
 }
Пример #12
0
 /// <summary>
 /// Returns the square of the distance between this IAntennaRelay and another IAntennaRelay
 /// </summary>
 /// <param name="relayOne">This <see cref="IAntennaRelay"/></param>
 /// <param name="relayTwo">Another <see cref="IAntennaRelay"/></param>
 public static double SqrDistanceTo(this AntennaRelay relayOne, IAntennaRelay relayTwo)
 {
     return(relayOne.vessel.sqrDistanceTo(relayTwo.vessel));
 }
Пример #13
0
        /// <summary>
        /// Returns the square of the distance between this IAntennaRelay and a CelestialBody
        /// </summary>
        /// <param name="relay">This <see cref="IAntennaRelay"/></param>
        /// <param name="body">A <see cref="CelestialBody"/></param>
        public static double SqrDistanceTo(this AntennaRelay relay, CelestialBody body)
        {
            double dist = (relay.vessel.GetWorldPos3D() - body.position).magnitude - body.Radius;

            return(dist * dist);
        }
Пример #14
0
 /// <summary>
 /// Returns the square of the distance between this IAntennaRelay and a Vessel
 /// </summary>
 /// <param name="relay">This <see cref="IAntennaRelay"/></param>
 /// <param name="vessel">A <see cref="Vessel"/></param>
 public static double SqrDistanceTo(this AntennaRelay relay, Vessel vessel)
 {
     return(relay.vessel.sqrDistanceTo(vessel));
 }