コード例 #1
0
        public override void OnUpdate()
        {
            if (vessel.IsInAtmosphere())
            {
                telescopeIsEnabled = false;
            }

            Events[nameof(beginOberservations)].active = !vessel.IsInAtmosphere() && !telescopeIsEnabled;
            Events[nameof(stopOberservations)].active  = telescopeIsEnabled;
            Fields[nameof(sciencePerDay)].guiActive    = telescopeIsEnabled;
            performPcnt   = (perform_factor_d * 100).ToString("0.0") + "%";
            sciencePerDay = (science_rate * 28800 * PluginHelper.GetScienceMultiplier(vessel)).ToString("0.00") + " " + Localizer.Format("#LOC_KSPIE_Telescope_ScienceperDa");//Science/Day

            List <ITelescopeController> telescope_controllers = vessel.FindPartModulesImplementing <ITelescopeController>();

            if (telescope_controllers.Any(tscp => tscp.CanProvideTelescopeControl))
            {
                double current_au = Vector3d.Distance(vessel.transform.position, LocalStar.position) / Vector3d.Distance(Homeworld.position, LocalStar.position);

                if (current_au >= 548 && !vessel.IsInAtmosphere())
                {
                    if (vessel.orbit.eccentricity < 0.8)
                    {
                        Events[nameof(beginOberservations2)].active = true;
                        gLensStr = (telescopeIsEnabled && dpo) ? Localizer.Format("#LOC_KSPIE_Telescope_Glensstatu1") : Localizer.Format("#LOC_KSPIE_Telescope_Glensstatu2");//"Ongoing.""Available"
                    }
                    else
                    {
                        Events[nameof(beginOberservations2)].active = false;
                        gLensStr = Localizer.Format("#LOC_KSPIE_Telescope_Glensstatu3", vessel.orbit.eccentricity.ToString("0.0"));//"Eccentricity: " +  + "; < 0.8 Required"
                    }
                }
                else
                {
                    Events[nameof(beginOberservations2)].active = false;
                    gLensStr = Localizer.Format("#LOC_KSPIE_Telescope_Glensstatu4", current_au.ToString("0.0"));// + " AU; Required 548 AU"
                }
            }
            else
            {
                Events[nameof(beginOberservations2)].active = false;
                gLensStr = Localizer.Format("#LOC_KSPIE_Telescope_Glensstatu5");//"Science Lab/Computer Core required"
            }

            if (helium_time_scale <= 0)
            {
                performPcnt = Localizer.Format("#LOC_KSPIE_Telescope_Glensstatu6");                        //"Helium Coolant Deprived."
            }
        }
コード例 #2
0
        protected override bool generateScienceData()
        {
            ScienceExperiment experiment = ResearchAndDevelopment.GetExperiment(experimentID);

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

            if (science_awaiting_addition > 0)
            {
                ScienceSubject subject = ResearchAndDevelopment.GetExperimentSubject(experiment, ExperimentSituations.InSpaceHigh, vessel.mainBody, "", "");
                if (subject == null)
                {
                    return(false);
                }

                subject.subjectValue = PluginHelper.GetScienceMultiplier(vessel);
                subject.scienceCap   = 167 * subject.subjectValue; //PluginHelper.getScienceMultiplier(vessel.mainBody.flightGlobalsIndex,false);
                subject.dataScale    = 1.25f;

                float remaining_base_science = (subject.scienceCap - subject.science) / subject.subjectValue;
                science_awaiting_addition = Math.Min(science_awaiting_addition, remaining_base_science);

                // transmission of zero data breaks the experiment result dialog box
                data_size   = Math.Max(float.Epsilon, science_awaiting_addition * subject.dataScale);
                scienceData = new ScienceData((float)data_size, 1, 0, subject.id, "Infrared Telescope Data");

                result_title  = Localizer.Format("#LOC_KSPIE_Telescope_Resulttitle");                     //"Infrared Telescope Experiment"
                result_string = Localizer.Format("#LOC_KSPIE_Telescope_Resultmsg", vessel.mainBody.name); //"Infrared telescope observations were recovered from the vicinity of " +  + "."

                recovery_value = science_awaiting_addition;
                transmit_value = recovery_value;
                xmit_scalar    = 1;
                ref_value      = subject.scienceCap;

                return(true);
            }
            return(false);
        }
コード例 #3
0
        protected override bool generateScienceData()
        {
            ScienceExperiment experiment = ResearchAndDevelopment.GetExperiment("FNSeismicProbeExperiment");

            if (experiment == null)
            {
                return(false);
            }
            //ScienceSubject subject = ResearchAndDevelopment.GetExperimentSubject(experiment, ExperimentSituations.SrfLanded, vessel.mainBody, "surface");
            //if (subject == null) {
            //    return false;
            //}
            //subject.scientificValue = 1;
            //subject.scienceCap = float.MaxValue;
            //subject.science = 1;
            //subject.subjectValue = 1;
            result_title   = Localizer.Format("#LOC_KSPIE_SeismicProbe_Resulttitle"); //"Impactor Experiment"
            result_string  = Localizer.Format("#LOC_KSPIE_SeismicProbe_Resultmsg");   //"No useful seismic data has been recorded."
            transmit_value = 0;
            recovery_value = 0;
            data_size      = 0;
            xmit_scalar    = 1;
            ref_value      = 1;

            // science_data = new ScienceData(0, 1, 0, subject.id, "data");

            ConfigNode config = PluginHelper.GetPluginSaveFile();

            if (config.HasNode("SEISMIC_SCIENCE_" + vessel.mainBody.name.ToUpper()))
            {
                ConfigNode planet_data = config.GetNode("SEISMIC_SCIENCE_" + vessel.mainBody.name.ToUpper());
                foreach (ConfigNode probe_data in planet_data.nodes)
                {
                    if (probe_data.name.Contains("IMPACT_"))
                    {
                        science_vess_ref = probe_data.name;
                        bool   transmitted         = false;
                        string vessel_name         = "";
                        float  distribution_factor = 0;

                        if (probe_data.HasValue("transmitted"))
                        {
                            transmitted = bool.Parse(probe_data.GetValue("transmitted"));
                        }
                        if (probe_data.HasValue("vesselname"))
                        {
                            vessel_name = probe_data.GetValue("vesselname");
                        }
                        if (probe_data.HasValue("distribution_factor"))
                        {
                            distribution_factor = float.Parse(probe_data.GetValue("distribution_factor"));
                        }

                        if (!transmitted)
                        {
                            ScienceSubject subject = ResearchAndDevelopment.GetExperimentSubject(experiment, ExperimentSituations.SrfLanded, vessel.mainBody, vessel.mainBody.name + "'s surface.", vessel.mainBody.name + "'s surface.");
                            if (subject == null)
                            {
                                return(false);
                            }
                            subject.subjectValue = PluginHelper.GetScienceMultiplier(vessel);
                            subject.scienceCap   = 10 * experiment.baseValue * subject.subjectValue;

                            float base_science = experiment.baseValue * distribution_factor;
                            data_size   = base_science * subject.dataScale;
                            scienceData = new ScienceData((float)data_size, 1, 0, subject.id, "Impactor Data");

                            result_string = Localizer.Format("#LOC_KSPIE_SeismicProbe_Resultmsg2", vessel_name, vessel.mainBody.name, vessel.mainBody.name);// + " impacted into " +  + " producing seismic activity.  From this data, information on the structure of " +  + "'s crust can be determined."

                            float science_amount = base_science * subject.subjectValue;
                            recovery_value = science_amount * subject.scientificValue;
                            transmit_value = recovery_value;
                            ref_value      = subject.scienceCap;

                            return(true);
                        }
                    }
                }
            }
            return(false);
        }