コード例 #1
0
        public bool TransmitToKSC(ScienceData data)
        {
            List<ModuleDataTransmitter> transmitters = this.part.vessel.FindPartModulesImplementing<ModuleDataTransmitter>();
            List<ScienceData> dataQueue = new List<ScienceData>();
            ModuleDataTransmitter bestTransmitter = null;

            //Package up the data and put it in the queue.
            TransmitItem item = new TransmitItem();
            item.science = data.dataAmount;
            item.reputation = 0f;
            item.funds = 0f;
            item.title = data.title;
            transmitList.Add(item);

            //Find an available transmitter. if found, transmit the data.
            dataQueue.Add(data);
            foreach (ModuleDataTransmitter transmitter in transmitters)
            {
                if (transmitter.IsBusy() == false)
                {
                    if (bestTransmitter == null)
                        bestTransmitter = transmitter;
                    else if (transmitter.packetSize > bestTransmitter.packetSize)
                        bestTransmitter = transmitter;
                }
            }

            if (bestTransmitter != null)
            {
                bestTransmitter.TransmitData(dataQueue, OnTransmitComplete);
                return true;
            }
            else
            {
                //Inform user that there is no available transmitter.
                ScreenMessages.PostScreenMessage(kNoAvailableTransmitter, 5.0f, ScreenMessageStyle.UPPER_CENTER);
                return false;
            }
        }
コード例 #2
0
        public bool TransmitToKSC(float science, float reputation, float funds, float dataAmount = -1f)
        {
            float transmitSize = dataAmount;
            List<ModuleDataTransmitter> transmitters = this.part.vessel.FindPartModulesImplementing<ModuleDataTransmitter>();
            List<ScienceData> dataQueue = new List<ScienceData>();
            ModuleDataTransmitter bestTransmitter = null;

            if (transmitSize == -1f)
            {
                if (science > 0f)
                    transmitSize = science / 0.3f;
                else if (reputation > 0f)
                    transmitSize = reputation / 0.3f;
                else
                    transmitSize = funds / 0.3f;
            }

            else
            {
                transmitSize = dataAmount;
            }

            ScienceExperiment experiment = ResearchAndDevelopment.GetExperiment("crewReport");
            ScienceSubject subject = ResearchAndDevelopment.GetExperimentSubject(experiment, ExperimentSituations.SrfLanded, FlightGlobals.GetHomeBody(), "");
            ScienceData data = new ScienceData(transmitSize, 0f, 0, subject.id, "");

            //Package up the data and put it in the queue.
            TransmitItem item = new TransmitItem();
            item.science = science;
            item.reputation = reputation;
            item.funds = funds;
            transmitList.Add(item);

            //Find an available transmitter. if found, transmit the data.
            dataQueue.Add(data);
            foreach (ModuleDataTransmitter transmitter in transmitters)
            {
                if (transmitter.IsBusy() == false)
                {
                    if (bestTransmitter == null)
                        bestTransmitter = transmitter;
                    else if (transmitter.packetSize > bestTransmitter.packetSize)
                        bestTransmitter = transmitter;
                }
            }

            if (bestTransmitter != null)
            {
                bestTransmitter.TransmitData(dataQueue, OnTransmitComplete);
                return true;
            }
            else
            {
                //Inform user that there is no available transmitter.
                ScreenMessages.PostScreenMessage(kNoAvailableTransmitter, 5.0f, ScreenMessageStyle.UPPER_CENTER);
                return false;
            }
        }