public void Transmit() { var data = experiment.GetData(); for (int i = 0; i < data.Length; i++) { // Use ExperimentResultDialogPage to compute the science value // This object creation modifies the data object new ExperimentResultDialogPage( experiment.part, data[i], data[i].baseTransmitValue, data[i].transmitBonus, false, string.Empty, false, new ScienceLabSearch(experiment.part.vessel, data[i]), null, null, null, null); } var transmitter = ScienceUtil.GetBestTransmitter(experiment.vessel); if (transmitter == null) { throw new InvalidOperationException("No transmitters available to transmit the data"); } transmitter.TransmitData(data.ToList()); for (int i = 0; i < data.Length; i++) { experiment.DumpData(data[i]); } if (experiment.useCooldown) { experiment.cooldownToGo = experiment.cooldownTimer; } }
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); } }
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.")); }
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. } }
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); } }
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); } }
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); } }
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(); }
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); } }
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); } } } }