private void spawnWarningDialog(ScienceRelayData data, string message)
 {
     warningDialog = PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new MultiOptionDialog(
                                                      "ScienceRelayWarning",
                                                      Localizer.Format("#autoLOC_6001489", message),
                                                      Localizer.Format("#autoLOC_236416"),
                                                      UISkinManager.defaultSkin,
                                                      new Rect(0.5f, 0.5f, 250, 120),
                                                      new DialogGUIBase[]
     {
         new DialogGUIButton <ScienceRelayData>(
             Localizer.Format("#autoLOC_6001430"),
             transferToVessel,
             data,
             true
             ),
         new DialogGUIButton(Localizer.Format("#autoLOC_190768"), null, true)
     }),
                                                  false, UISkinManager.defaultSkin, true, "");
 }
        private void onTriggeredData(ScienceData data, Vessel vessel, bool aborted)
        {
            if (vessel == null)
            {
                return;
            }

            if (vessel != FlightGlobals.ActiveVessel)
            {
                return;
            }

            if (data == null)
            {
                return;
            }

            for (int i = queuedData.Count - 1; i >= 0; i--)
            {
                ScienceRelayData d = queuedData[i];

                if (d._data.subjectID != data.subjectID)
                {
                    continue;
                }

                if (aborted)
                {
                    data.triggered = false;
                    return;
                }

                if (!finishTransfer(d._target, d._data, d._boost))
                {
                    Part host = d._host;

                    List <IScienceDataContainer> containers = host.FindModulesImplementing <IScienceDataContainer>();

                    IScienceDataContainer hostContainer = null;

                    for (int j = containers.Count - 1; j >= 0; j--)
                    {
                        IScienceDataContainer container = containers[j];

                        if (container == null)
                        {
                            continue;
                        }

                        PartModule mod = container as PartModule;

                        if (mod.part == null)
                        {
                            continue;
                        }

                        if (mod.part.flightID != data.container)
                        {
                            continue;
                        }

                        hostContainer = container;
                        break;
                    }

                    if (hostContainer != null)
                    {
                        data.triggered = false;
                        hostContainer.ReturnData(data);
                    }
                }
                else
                {
                    ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238419", new string[]
                    {
                        d._target.vesselName,
                        data.dataAmount.ToString("F0"),
                        data.title
                    }),
                                                     4, ScreenMessageStyle.UPPER_LEFT);
                }

                queuedData.Remove(d);

                break;
            }
        }
        private void transferToVessel(ScienceRelayData RelayData)
        {
            if (resultsDialog != null)
            {
                resultsDialog.Dismiss();
            }

            if (RelayData._host == null || RelayData._data == null || RelayData._target == null || RelayData._source == null)
            {
                return;
            }

            List <ScienceRelayData> data = new List <ScienceRelayData>();

            if (transferAll)
            {
                for (int i = resultsDialog.pages.Count - 1; i >= 0; i--)
                {
                    ExperimentResultDialogPage page = resultsDialog.pages[i];

                    if (page == null)
                    {
                        continue;
                    }

                    if (page.pageData == null)
                    {
                        continue;
                    }

                    if (page.host == null)
                    {
                        continue;
                    }

                    ScienceRelayData relayData = new ScienceRelayData()
                    {
                        _data   = page.pageData,
                        _host   = page.host,
                        _boost  = signalBoost(RelayData._boost + 1, RelayData._target, page.pageData, page.xmitDataScalar),
                        _target = RelayData._target,
                        _source = RelayData._source,
                    };

                    relayData._data.baseTransmitValue = page.xmitDataScalar;

                    data.Add(relayData);
                }
            }
            else
            {
                RelayData._data.baseTransmitValue = currentPage.xmitDataScalar;
                data.Add(RelayData);
            }

            for (int i = data.Count - 1; i >= 0; i--)
            {
                ScienceData d = data[i]._data;

                Part host = data[i]._host;

                List <IScienceDataContainer> containers = host.FindModulesImplementing <IScienceDataContainer>();

                IScienceDataContainer hostContainer = null;

                for (int j = containers.Count - 1; j >= 0; j--)
                {
                    hostContainer = null;

                    IScienceDataContainer container = containers[j];

                    if (container == null)
                    {
                        continue;
                    }

                    ScienceData[] containerData = container.GetData();

                    for (int k = containerData.Length - 1; k >= 0; k--)
                    {
                        ScienceData dat = containerData[k];

                        if (dat.subjectID == d.subjectID)
                        {
                            hostContainer = container;
                            break;
                        }
                    }

                    if (hostContainer != null)
                    {
                        break;
                    }
                }

                IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(RelayData._source.FindPartModulesImplementing <IScienceDataTransmitter>());

                if (bestTransmitter == null)
                {
                    if (CommNetScenario.CommNetEnabled)
                    {
                        ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238505"), 3, ScreenMessageStyle.UPPER_CENTER);
                    }
                    else
                    {
                        ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238507"), 3, ScreenMessageStyle.UPPER_CENTER);
                    }
                }
                else
                {
                    d.triggered = true;

                    bestTransmitter.TransmitData(new List <ScienceData> {
                        d
                    });

                    queuedData.Add(data[i]);

                    if (hostContainer != null)
                    {
                        hostContainer.DumpData(d);
                    }
                }
            }
        }