Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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();
         }
     }
 }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
            }
        }