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." } }
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); }
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); }