public override bool canConduct() { failMessage = ""; if (Inoperable) { failMessage = "Experiment is no longer functional; must be reset at a science lab or returned to Kerbin"; return(false); } else if (Deployed) { failMessage = experimentFullMessage; return(false); } else if (scienceReports.Count > 0) { failMessage = experimentFullMessage; return(false); } else if (vessel.situation != Vessel.Situations.LANDED && vessel.situation != Vessel.Situations.PRELAUNCH && !DMAsteroidScience.AsteroidGrappled) { failMessage = customFailMessage; return(false); } if (FlightGlobals.ActiveVessel.isEVA) { if (!ScienceUtil.RequiredUsageExternalAvailable(part.vessel, FlightGlobals.ActiveVessel, (ExperimentUsageReqs)usageReqMaskExternal, exp, ref usageReqMessage)) { failMessage = usageReqMessage; return(false); } } return(true); }
new public void DeployExperimentExternal() { if (FlightGlobals.ActiveVessel.isEVA) { if (!ScienceUtil.RequiredUsageExternalAvailable(part.vessel, FlightGlobals.ActiveVessel, (ExperimentUsageReqs)usageReqMaskExternal, surfaceExp, ref usageReqMessage)) { ScreenMessages.PostScreenMessage("IR Surface Sampler does not meet the requirements for EVA experiment deployment", 6f, ScreenMessageStyle.UPPER_LEFT); } else { DeployExperiment(); } } }
static bool Prefix(ModuleComet __instance, ref ScienceExperiment ___experiment) { // Patch only if science is enabled if (!Features.Science) { return(true); } // stock ModuleAsteroid.performSampleExperiment code : get situation and check availablility ExperimentSituations experimentSituation = ScienceUtil.GetExperimentSituation(__instance.vessel); string message = string.Empty; if (!ScienceUtil.RequiredUsageExternalAvailable(__instance.vessel, FlightGlobals.ActiveVessel, (ExperimentUsageReqs)__instance.experimentUsageMask, ___experiment, ref message)) { ScreenMessages.PostScreenMessage("<b><color=orange>" + message + "</color></b>", 6f, ScreenMessageStyle.UPPER_LEFT); return(false); } if (!___experiment.IsAvailableWhile(experimentSituation, __instance.vessel.mainBody)) { ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_230133", ___experiment.experimentTitle), 5f, ScreenMessageStyle.UPPER_CENTER); return(false); } // stock ModuleAsteroid.performSampleExperiment code : create subject ScienceSubject subject = ResearchAndDevelopment.GetExperimentSubject(___experiment, experimentSituation, __instance.part.partInfo.name + __instance.part.flightID, __instance.part.partInfo.title, __instance.vessel.mainBody, string.Empty, string.Empty); // put the data on the EVA kerbal drive. if (FlightGlobals.ActiveVessel == null) { return(false); } double size = ___experiment.baseValue * ___experiment.dataScale; Drive drive = Drive.SampleDrive(FlightGlobals.ActiveVessel.KerbalismData(), size); if (drive != null) { double mass = size * Settings.AsteroidSampleMassPerMB; SubjectData subjectData = ScienceDB.GetSubjectDataFromStockId(subject.id, null, __instance.part.partInfo.title); drive.Record_sample(subjectData, size, mass, true); Message.Post(Lib.BuildString("<b><color=ffffff>", subject.title, "</color></b>\n", (mass * 1000.0).ToString("F1"), "<b><i> Kg of sample stored</i></b>")); } else { Message.Post("Not enough sample storage available"); } // don't call TakeSampleEVAEvent() (this will also prevent the call to ModuleAsteroid.performSampleExperiment) return(false); }
new public void DeployExperimentExternal() { if (FlightGlobals.ActiveVessel.isEVA) { if (!ScienceUtil.RequiredUsageExternalAvailable(part.vessel, FlightGlobals.ActiveVessel, (ExperimentUsageReqs)usageReqMaskExternal, surfaceExp, ref usageReqMessage)) { ScreenMessages.PostScreenMessage("<b><color=orange>" + usageReqMessage + "</color></b>", 6f, ScreenMessageStyle.UPPER_LEFT); } else { DeployExperiment(); } } }
public void gatherScienceData(bool silent = false) { if (FlightGlobals.ActiveVessel.isEVA) { if (!ScienceUtil.RequiredUsageExternalAvailable(part.vessel, FlightGlobals.ActiveVessel, (ExperimentUsageReqs)usageReqMaskExternal, exp, ref usageReqMessage)) { ScreenMessages.PostScreenMessage(usageReqMessage, 6f, ScreenMessageStyle.UPPER_LEFT); return; } } if (receiverInRange && asteroidInSight) { ModuleAsteroid modAst = null; float distance = asteroidScanLength(out modAst); runExperiment(distance, modAst, silent); } else { ScreenMessages.PostScreenMessage("No valid targets within scaning range", 5f, ScreenMessageStyle.UPPER_CENTER); } }
public bool canConduct() { if (!receiverInRange) { failMessage = "No receivers detected within scanning range"; return(false); } else if (!asteroidInSight) { failMessage = "No valid targets within scanning range"; return(false); } if (FlightGlobals.ActiveVessel.isEVA) { if (!ScienceUtil.RequiredUsageExternalAvailable(part.vessel, FlightGlobals.ActiveVessel, (ExperimentUsageReqs)usageReqMaskExternal, exp, ref usageReqMessage)) { failMessage = usageReqMessage; return(false); } } return(true); }
IEnumerator CheckResources() { double resourceAmtAvailable, maxAmount; var wait = new WaitForSeconds(Common.WAITTIME); while (true) { this.part.GetConnectedResourceTotals((int)resourceId, out resourceAmtAvailable, out maxAmount); if (!Deployed) { if (ScienceUtil.RequiredUsageInternalAvailable(base.vessel, base.part, (ExperimentUsageReqs)usageReqMaskInternal, experiment, ref usageReqMessage)) { Actions["DeployAction"].active = Events["DeployExperiment"].guiActive = (ResourceAmtUsedForDeploy <= resourceAmtAvailable); //Logg.Info("Setting DeployAction & DeployExperiment"); } if (ScienceUtil.RequiredUsageExternalAvailable(base.vessel, FlightGlobals.ActiveVessel, (ExperimentUsageReqs)usageReqMaskExternal, experiment, ref usageReqMessage)) { Events["DeployExperimentExternal"].guiActive = (ResourceAmtUsedForDeploy <= resourceAmtAvailable); //Logg.Info("Setting DeployExperimentExternal"); } } yield return(wait); } }