Пример #1
0
        public static double GetREALSignal(CommNet.CommPath path)
        {
            double signal = 1d;

            bool first = true;

            foreach (CommNet.CommLink link in path)
            {
                signal *= GetREALSignal(link, !first);
                first   = false;
            }
            return(signal);
        }
Пример #2
0
 public virtual RealAntenna AntennaTowardsHome()
 {
     CommNet.CommPath path = new CommNet.CommPath();
     if (!(Net.FindHome(this, path)))
     {
         return(null);
     }
     if (this[path.First.end] is RACommLink link)
     {
         return(link.start.Equals(this) ? link.FwdAntennaTx: link.RevAntennaTx);
     }
     return(null);
 }
Пример #3
0
        public static void RAKerbalismLinkHandler(object p1, Vessel v)
        {
            if (CommNet.CommNetScenario.CommNetEnabled && v.Connection is RACommNetVessel raCNV && raCNV.Comm is RACommNode node)
            {
                bool            powered = (bool)p1.GetType().GetField("powered").GetValue(p1);
                bool            transmitting = (bool)p1.GetType().GetField("transmitting").GetValue(p1);
                double          ecIdle = powered ? raCNV.IdlePowerDraw() : 0;
                double          ec = ecIdle, rate = 0, strength = 0, packetInterval = 1.0f;
                int             status      = 2;
                string          target_name = "NotConnected";
                List <string[]> sList       = new List <string[]>();
                if (!v.loaded)
                {
                    raCNV.powered = powered;
                }
                if (powered && node.AntennaTowardsHome() is RealAntenna ra)
                {
                    CommNet.CommPath path = new CommNet.CommPath();
                    (node.Net as RACommNetwork).FindHome(node, path);
                    status = !raCNV.IsConnectedHome ? 2 : path.Count == 1 ? 0 : 1;
                    rate   = (node.Net as RACommNetwork).MaxDataRateToHome(node) / 8e6;  // Convert rate from bps to MBps;
                    if (transmitting)
                    {
                        ec += ra.PowerDrawLinear * packetInterval * 1e-6;                  // 1 EC/sec = 1KW.  Draw(mw) * interval(sec) * mW -> kW conversion
                    }
                    if (node[path.First.end] is RACommLink link)
                    {
                        strength = link.start.Equals(node) ? link.FwdMetric : link.RevMetric;
                    }
                    foreach (CommNet.CommLink clink in path)
                    {
                        sList.Add(new string[1] {
                            clink.end.name
                        });
                    }
                    //sList.Add(new string[1] { path.First.end.name });
                    target_name = path.First.end.name;
                }

                p1.GetType().GetField("linked").SetValue(p1, raCNV.IsConnectedHome); // Link Status
                p1.GetType().GetField("ec").SetValue(p1, ec);                        // EC/s
                p1.GetType().GetField("rate").SetValue(p1, rate);                    // Rate in MB/s
                p1.GetType().GetField("status").SetValue(p1, status);                // 0=direct, 1=indirect, 2=none
                p1.GetType().GetField("strength").SetValue(p1, strength);            // Signal quality indicator (float 0..1)
                p1.GetType().GetField("target_name").SetValue(p1, target_name);
                p1.GetType().GetField("control_path").SetValue(p1, sList);
                p1.GetType().GetField("ec_idle")?.SetValue(p1, ecIdle);

                //Debug.LogFormat($"{ModTag}Rate: {RATools.PrettyPrintDataRate(rate * 8 * 1024 * 1024)} EC: {ec:F4}  Linked:{raCNV.IsConnectedHome}  Strength: {strength:F2}  Target: {target_name}");
            }
        }
Пример #4
0
        public static double GetRealSignalForTrackingStation(CommNet.CommPath path)
        {
            // return the signal strength between a vessel and the dsn when there are relays between them
//			Debug.Log ("[AH] getting real signal for " + path[0].a.name);

            double signal = 1d;

            foreach (CommNet.CommLink link in path)
            {
//				Debug.Log ("[AH] link : " + link.ToString ());
                signal *= link.signalStrength;
            }
            return(signal);
        }
Пример #5
0
        public static double GetRealSignal(CommNet.CommPath path, Vessel v = null)
        {
            // return the signal strength between a vessel and the dsn when there are relays between them
//			Debug.Log ("[AH] getting real signal for " + path[0].a.name);
            if (v == null)
            {
                v = FlightGlobals.ActiveVessel;
            }
            double signal = 1d;

            foreach (CommNet.CommLink link in path)
            {
//				Debug.Log ("[AH] link : " + link.ToString ());
                if (link.a.transform.GetComponent <Vessel> () != v)
                {
                    signal *= link.signalStrength;
                }
            }
            return(signal);
        }