private void onTransmitData(ScienceData data)
        {
            results = null;

            if (handler == null)
            {
                return;
            }

            IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(vessel);

            if (bestTransmitter != null)
            {
                SEP_Utilities.log("Sending data to vessel comms: {0}", logLevels.log, data.title);
                bestTransmitter.TransmitData(new List <ScienceData> {
                    data
                });
                DumpData(data);
            }
            else if (CommNet.CommNetScenario.CommNetEnabled)
            {
                ScreenMessages.PostScreenMessage("No usable, in-range Comms Devices on this vessel. Cannot Transmit Data.", 3f, ScreenMessageStyle.UPPER_CENTER);
            }
            else
            {
                ScreenMessages.PostScreenMessage("No Comms Devices on this vessel. Cannot Transmit Data.", 3f, ScreenMessageStyle.UPPER_CENTER);
            }
        }
Ejemplo n.º 2
0
            public Result <object, string> TransmitData()
            {
                ScienceData[] data = experiment.GetData();
                ScienceData   scienceData;

                for (int i = 0; i < data.Length; ++i)
                {
                    scienceData = data[i];

                    ExperimentResultDialogPage page = new ExperimentResultDialogPage(
                        partModule.part, scienceData, scienceData.baseTransmitValue, scienceData.transmitBonus,
                        false, "", false,
                        new ScienceLabSearch(vesselAdapter.vessel, scienceData),
                        null, null, null, null);
                }

                IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(vesselAdapter.vessel);

                if (bestTransmitter != null)
                {
                    bestTransmitter.TransmitData(data.ToList());
                    Array.ForEach(experiment.GetData(), experiment.DumpData);
                    if (experiment.useCooldown)
                    {
                        experiment.cooldownToGo = experiment.cooldownTimer;
                    }

                    return(Result.Ok <object, string>(null));
                }

                return(Result.Err <object, string>("No transmitters available on this vessel or no data to transmit."));
            }
Ejemplo n.º 3
0
        private void onTransmitData(ScienceData data)
        {
            results = null;

            if (handler == null)
            {
                return;
            }

            IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(vessel);

            if (bestTransmitter != null)
            {
                SEP_Utilities.log("Sending data to vessel comms: {0}", logLevels.log, data.title);
                bestTransmitter.TransmitData(new List <ScienceData> {
                    data
                });
                DumpData(data);
            }
            else if (CommNet.CommNetScenario.CommNetEnabled)
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_237738"), 3f, ScreenMessageStyle.UPPER_CENTER);
            }
            else
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_237740"), 3f, ScreenMessageStyle.UPPER_CENTER);
            }
        }
        private void _onPageTransmit(ScienceData data)
        {
            IScienceDataTransmitter transmitter = ScienceUtil.GetBestTransmitter(vessel);

            if (transmitter != null)
            {
                List <ScienceData> dataToSend = new List <ScienceData>();
                dataToSend.Add(data);
                transmitter.TransmitData(dataToSend);
                scienceData.Remove(data);
            }
            else
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_TST_0079"), 3f, ScreenMessageStyle.UPPER_CENTER); //#autoLOC_TST_0079 = No Comms Devices on this vessel. Cannot Transmit Data.
            }
        }
Ejemplo n.º 5
0
        private void _onPageTransmit(ScienceData data)
        {
            IScienceDataTransmitter transmitter = ScienceUtil.GetBestTransmitter(vessel);

            if (transmitter != null)
            {
                List <ScienceData> dataToSend = new List <ScienceData>();
                dataToSend.Add(data);
                transmitter.TransmitData(dataToSend);
                _scienceData.Remove(data);
                updateAvailableEvents();
            }
            else
            {
                ScreenMessages.PostScreenMessage(cacheautoLOC_TST_0079, 3f, ScreenMessageStyle.UPPER_CENTER);
            }
        }
Ejemplo n.º 6
0
        [KSPEvent(name = "EventTransmit", guiActive = false, guiActiveEditor = false, guiName = "#RT_ModuleUI_Transmit")]//Transmit all science
        public void EventTransmit()
        {
            if (mTransmitter != null && mTransmitter.CanTransmit())
            {
                List <ScienceData> scienceDataList = new List <ScienceData>();
                for (int i = 0; i < vessel.parts.Count; i++)
                {
                    //get experiments
                    var experiments = vessel.parts[i].FindModulesImplementing <ModuleScienceExperiment>();
                    for (int j = 0; j < experiments.Count; j++)
                    {
                        if (experiments[j].HasExperimentData)
                        {
                            var scienceData = experiments[j].GetData();
                            for (int k = 0; k < scienceData.Length; k++)
                            {
                                experiments[j].DumpData(scienceData[k]);
                            }
                            scienceDataList.AddRange(scienceData);
                        }
                    }

                    //get containers of stored experiments
                    var scienceContainers = vessel.parts[i].FindModulesImplementing <ModuleScienceContainer>();
                    for (int j = 0; j < scienceContainers.Count; j++)
                    {
                        if (scienceContainers[j].GetStoredDataCount() > 0)
                        {
                            var scienceData = scienceContainers[j].GetData();
                            for (int k = 0; k < scienceData.Length; k++)
                            {
                                scienceContainers[j].DumpData(scienceData[k]);
                            }
                            scienceDataList.AddRange(scienceData);
                        }
                    }
                }

                if (scienceDataList.Count > 0)
                {
                    mTransmitter.TransmitData(scienceDataList);
                }
            }
        }
Ejemplo n.º 7
0
        public override void TransmitData()
        {
            ThrowIfNotCPUVessel();

            // This logic is mostly copied to DMScienceExperimentFields, make sure that changes here are copied there

            ScienceData[] data = container.GetData();
            ScienceData   scienceData;

            for (int i = 0; i < data.Length; ++i)
            {
                scienceData = data[i];
                // By using ExperimentResultDialogPage we ensure that the logic calculating the value is exactly the same
                // as that used KSP's dialog.  The page type doesn't include any UI code itself, it just does the math to
                // confirm the values, and stores some callbacks for the UI to call when buttons are pressed.
                ExperimentResultDialogPage page = new ExperimentResultDialogPage(
                    module.part, scienceData, scienceData.baseTransmitValue, scienceData.transmitBonus, // the parameters with data we care aboue
                    false, "", false,                                                                   // disable transmit warning and reset option, these are used for the UI only
                    new ScienceLabSearch(module.part.vessel, scienceData),                              // this is used to calculate the transmit bonus, I think...
                    null, null, null, null);                                                            // null callbacks, no sense in creating objects when we won't actually perform the callback.
                // The dialog page modifies the referenced object, so our reference has been updated.
            }

            // Logic pulled from ModuleScienceExperiment.sendDataToComms
            IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(module.vessel);

            if (bestTransmitter != null)
            {
                bestTransmitter.TransmitData(data.ToList());
                for (int i = 0; i < data.Length; ++i)
                {
                    container.DumpData(data[i]); // DumpData calls endExperiment, and handles setting as inoperable
                }
                if (module.useCooldown)
                {
                    module.cooldownToGo = module.cooldownTimer;
                }
            }
            else
            {
                ScreenMessages.PostScreenMessage("No transmitters available on this vessel or no data to transmit.", 4f, ScreenMessageStyle.UPPER_LEFT);
            }
        }
Ejemplo n.º 8
0
        private void _onPageTransmit(ScienceData data)
        {
            List <IScienceDataTransmitter> transmitters = vessel.FindPartModulesImplementing <IScienceDataTransmitter>();

            if (transmitters.Count > 0)
            {
                IScienceDataTransmitter transmitter = transmitters.FirstOrDefault(t => t.CanTransmit());
                if (transmitter != null)
                {
                    transmitter.TransmitData(new List <ScienceData> {
                        data
                    });
                    _DataAmount -= data.dataAmount;
                    scienceData.Remove(data);
                }
            }
            else
            {
                ScreenMessages.PostScreenMessage("No Comms Devices on this vessel. Cannot Transmit Data.", 3f, ScreenMessageStyle.UPPER_CENTER);
            }
        }
 private void BeginTransmissionWithRealTransmitter(IScienceDataTransmitter transmitter, List <ScienceData> science, Callback callback)
 {
     if (transmitter == null)
     {
         throw new System.ArgumentNullException("transmitter");
     }
     if (science == null)
     {
         throw new System.ArgumentNullException("science");
     }
     if ((PartModule)transmitter == null)
     {
         TransmitData(science, callback);
         throw new NonexistentTransmitterException();
     }
     Log.Debug(string.Concat("Beginning real transmission of ", science.Count, " science reports on transmitter ", ((PartModule)transmitter).part.flightID));
     if (callback != null)
     {
         return;
     }
     transmitter.TransmitData(science);
 }
Ejemplo n.º 10
0
        private void onTransmitData(ScienceData data)
        {
            resultsDialog = null;
            IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(vessel);

            if (bestTransmitter != null)
            {
                bestTransmitter.TransmitData(new List <ScienceData> {
                    data
                });
                DumpData(data);
            }
            else if (CommNet.CommNetScenario.CommNetEnabled)
            {
                ScreenMessages.PostScreenMessage("No usable, in-range Comms Devices on this vessel. Cannot Transmit Data.", 3f, ScreenMessageStyle.UPPER_CENTER);
            }

            else
            {
                ScreenMessages.PostScreenMessage("No Comms Devices on this vessel. Cannot Transmit Data.", 3f, ScreenMessageStyle.UPPER_CENTER);
            }
        }
        private void onTransmitData(ScienceData data)
        {
            resultsDialog = null;
            IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(vessel);

            if (bestTransmitter != null)
            {
                bestTransmitter.TransmitData(new List <ScienceData> {
                    data
                });
                DumpData(data);
            }
            else if (CommNet.CommNetScenario.CommNetEnabled)
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_237738"), 3f, ScreenMessageStyle.UPPER_CENTER);
            }

            else
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_237740"), 3f, ScreenMessageStyle.UPPER_CENTER);
            }
        }
Ejemplo n.º 12
0
        private void OnTransmitData(ScienceData data)
        {
            _expDialog = null;
            IScienceDataTransmitter transmitter = ScienceUtil.GetBestTransmitter(FlightGlobals.ActiveVessel);

            if (transmitter != null)
            {
                transmitter.TransmitData(new List <ScienceData> {
                    data
                });
                DumpData(data);
            }
            else if (CommNet.CommNetScenario.CommNetEnabled)
            {
                Utils.DisplayScreenMsg(Localizer.Format("#autoLOC_237738"));
            }
            else
            {
                Utils.DisplayScreenMsg(Localizer.Format("#autoLOC_237740"));
            }

            //UpdateUI();
        }
Ejemplo n.º 13
0
 void TransmitData(ScienceData data, IScienceDataContainer container)
 {
     if (TransmittingScience.ContainsKey(data.subjectID))
     {
         Debug.Log("[MoarScience!] transmitting queue already has: " + data.subjectID);
         return;
     }
     if (data.baseTransmitValue < 0.40)
     {
         // Debug.Log("[MoarScience!] transmit value is less than 40%: " + data.subjectID);
         return;
     }
     // we check for a transmitter late because of logspam from remotetech
     if (transmitter == null)
     {
         Debug.Log("[MoarScience!] have science to transfer but no transmitter/connection");
         return;
     }
     AddSubjectIDToDict(TransmittingScience, data.subjectID);
     transmitter.TransmitData(new List <ScienceData> {
         data
     });
     container.DumpData(data);
 }
        private bool transmitData(SEP_ExperimentHandler exp, int level, float submittedData, float newData)
        {
            ScienceData data = SEP_Utilities.getScienceData(exp, exp.getExperimentLevel(level), level);

            if (exp.vessel.loaded)
            {
                IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(exp.vessel);

                if (bestTransmitter != null)
                {
                    ScienceExperiment e = exp.getExperimentLevel(level);

                    float transmitterCost = getLoadedTransmitterCost(bestTransmitter);

                    float ecCost = newData * e.dataScale * transmitterCost;

                    if (ecCost > SEP_Utilities.getTotalVesselEC(exp.vessel))
                    {
                        if (!dataOnboard(exp, level))
                        {
                            SEP_Utilities.log("Not enough power for transmissionon this vessel: {1}; saving data: {0}", logLevels.log, data.title, exp.vessel.vesselName);
                            exp.addData(data);
                            if (exp.host != null)
                            {
                                exp.host.Events["ReviewDataEvent"].active   = true;
                                exp.host.Events["TransferDataEvent"].active = exp.host.hasContainer;
                                exp.host.Events["CollectData"].active       = true;
                                if (exp.host.Controller != null)
                                {
                                    exp.host.Controller.setCollectEvent();
                                }
                            }
                        }
                        return(false);
                    }

                    SEP_Utilities.log("Sending data to vessel comms: {0}", logLevels.log, data.title);
                    bestTransmitter.TransmitData(new List <ScienceData> {
                        data
                    });
                    return(true);
                }
                else
                {
                    if (!dataOnboard(exp, level))
                    {
                        SEP_Utilities.log("No Comms Devices on this vessel: {1}. Cannot Transmit Data; saving data: {0}", logLevels.log, data.title, exp.vessel.vesselName);
                        exp.addData(data);
                        if (exp.host != null)
                        {
                            exp.host.Events["ReviewDataEvent"].active   = true;
                            exp.host.Events["TransferDataEvent"].active = exp.host.hasContainer;
                            exp.host.Events["CollectData"].active       = true;
                            if (exp.host.Controller != null)
                            {
                                exp.host.Controller.setCollectEvent();
                            }
                        }
                    }
                    return(false);
                }
            }
            else
            {
                List <ProtoPartSnapshot> transmitters = getProtoTransmitters(exp.vessel.protoVessel);

                float?transmitterCost = getBestTransmitterCost(transmitters);

                if (transmitterCost == null)
                {
                    if (!dataOnboard(exp, level))
                    {
                        SEP_Utilities.log("No Comms Devices on this vessel: {1}. Cannot Transmit Data; saving data: {0}", logLevels.log, data.title, exp.vessel.protoVessel.vesselName);
                        exp.addData(data);
                    }
                    return(false);
                }

                //SEP_Utilities.log("Transmission Score: {0:N4}EC", logLevels.warning, transmitterCost);

                ScienceExperiment e = exp.getExperimentLevel(level);

                float ecCost = newData * e.dataScale * (float)transmitterCost;

                //SEP_Utilities.log("Transmission Cost: {0:N4}EC", logLevels.warning, ecCost);

                if (ecCost > SEP_Utilities.getTotalVesselEC(exp.vessel.protoVessel))
                {
                    if (!dataOnboard(exp, level))
                    {
                        SEP_Utilities.log("Not enough electricity on this vessel: {1}. Cannot Transmit Data; saving data: {0}", logLevels.log, data.title, exp.vessel.protoVessel.vesselName);
                        exp.addData(data);
                    }
                    return(false);
                }

                ScienceSubject sub = SEP_Utilities.checkAndUpdateRelatedSubjects(exp, level, newData, submittedData);

                if (sub == null)
                {
                    return(false);
                }

                ResearchAndDevelopment.Instance.SubmitScienceData(newData * sub.dataScale, sub, 1, exp.vessel.protoVessel);

                if (exp.vessel.HasValidContractObjectives(new List <string> {
                    "Generator"
                }))
                {
                    consumeResources(exp.vessel.protoVessel, ecCost);
                }

                exp.submittedData += (newData - submittedData);

                return(true);
            }
        }
Ejemplo n.º 15
0
        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);
                    }
                }
            }
        }