コード例 #1
0
        protected override void setupPartModules()
        {
            base.setupPartModules();

            //Get the experiment lab
            experimentLab = this.part.FindModuleImplementing <WBIExperimentLab>();
            if (experimentLab == null)
            {
                return;
            }
            experimentLab.unavailableMessage = kUnavailableMessage;

            //Setup the science container
            if (scienceContainer == null)
            {
                scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();
                scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
                scienceContainer.Events["ReviewDataEvent"].guiActive          = false;

                //Terrain uplink
                terrainUplinkView.part             = this.part;
                terrainUplinkView.scienceContainer = scienceContainer;
            }

            //Kerbnet access
            kerbNetAccess = this.part.FindModuleImplementing <ModuleKerbNetAccess>();
            if (kerbNetAccess != null)
            {
            }
        }
コード例 #2
0
        public bool CanTransfer(ModuleScienceExperiment baseExperiment, ModuleScienceContainer moduleScienceContainer)
        {
            var currentExperiment = baseExperiment as DMModuleScienceAnimate;

            if ((currentExperiment as IScienceDataContainer).GetScienceCount() == 0)
            {
                _AutomatedScienceSamplerInstance.Log(currentExperiment.experimentID, ": Experiment has no data skiping transfer. Data found: ", (currentExperiment as IScienceDataContainer).GetScienceCount(), "_", currentExperiment.experimentNumber);
                return(false);
            }
            if (!currentExperiment.IsRerunnable())
            {
                if (!_AutomatedScienceSamplerInstance.craftSettings.transferAllData)
                {
                    _AutomatedScienceSamplerInstance.Log(currentExperiment.experimentID, ": Experiment isn't rerunnable and transferAllData is turned off.");
                    return(false);
                }
            }
            if (!_AutomatedScienceSamplerInstance.craftSettings.dumpDuplicates)
            {
                foreach (var data in (currentExperiment as IScienceDataContainer).GetData())
                {
                    if (moduleScienceContainer.HasData(data))
                    {
                        _AutomatedScienceSamplerInstance.Log(currentExperiment.experimentID, ": Target already has experiment and dumping is disabled.");
                        return(false);
                    }
                }
            }
            _AutomatedScienceSamplerInstance.Log(currentExperiment.experimentID, ": We can transfer the science!");
            return(true);
        }
コード例 #3
0
        private void transferData(PartItemTransfer.DismissAction dismiss, Part p)
        {
            if (dismiss != PartItemTransfer.DismissAction.ItemMoved)
            {
                return;
            }

            if (p == null)
            {
                return;
            }

            if (handler == null)
            {
                return;
            }

            if (handler.GetScienceCount() <= 0)
            {
                ScreenMessages.PostScreenMessage(string.Format("[{0}]: has no data to transfer.", part.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            ModuleScienceContainer container = p.FindModuleImplementing <ModuleScienceContainer>();

            if (container == null)
            {
                ScreenMessages.PostScreenMessage(string.Format("<color=orange>[{0}]: {1} has no data container, canceling transfer.<color>", part.partInfo.title, p.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            onTransferData(container);
        }
コード例 #4
0
        public override void UpdateContentsAndGui(string templateName)
        {
            ModuleScienceContainer scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();

            if (scienceContainer != null)
            {
                ScienceData[] dataQueue = scienceContainer.GetData();
                if (dataQueue != null)
                {
                    if (dataQueue.Length > 0)
                    {
                        scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = true;
                        scienceContainer.Events["ReviewDataEvent"].guiActive          = true;
                    }
                }
            }

            base.UpdateContentsAndGui(templateName);

            //Check to see if we've displayed the tooltip for the template.

            //First, we're only interested in deployed modules.
            if (isDeployed == false)
            {
                return;
            }

            //Now check
            checkAndShowToolTip();
        }
コード例 #5
0
        private void findContainers()
        {
            for (int i = vessel.Parts.Count - 1; i >= 0; i--)
            {
                Part p = vessel.Parts[i];

                if (p == null)
                {
                    continue;
                }

                if (p.State == PartStates.DEAD)
                {
                    continue;
                }

                ModuleScienceContainer container = p.FindModuleImplementing <ModuleScienceContainer>();

                if (container == null)
                {
                    continue;
                }

                hasContainer = container.canBeTransferredToInVessel;
                break;
            }
        }
コード例 #6
0
        public override void OnStart(StartState state)
        {
            base.OnStart(state);
            converter        = this.part.FindModuleImplementing <WBIScienceConverter>();
            sciLab           = this.part.FindModuleImplementing <ModuleScienceLab>();
            scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();

            publishIconWhite = GameDatabase.Instance.GetTexture("WildBlueIndustries/Pathfinder/Icons/WBIPublishWhite", false);
            sellIconWhite    = GameDatabase.Instance.GetTexture("WildBlueIndustries/Pathfinder/Icons/WBISellWhite", false);
            scienceIconWhite = GameDatabase.Instance.GetTexture("WildBlueIndustries/Pathfinder/Icons/WBIScienceWhite", false);

            publishIconBlack = GameDatabase.Instance.GetTexture("WildBlueIndustries/Pathfinder/Icons/WBIPublish", false);
            sellIconBlack    = GameDatabase.Instance.GetTexture("WildBlueIndustries/Pathfinder/Icons/WBISell", false);
            scienceIconBlack = GameDatabase.Instance.GetTexture("WildBlueIndustries/Pathfinder/Icons/WBIScience", false);

            publishIcon = publishIconBlack;
            sellIcon    = sellIconBlack;
            scienceIcon = scienceIconBlack;

            //If we want to show the ops view dialog instead of the context buttons,
            //then hide the context buttons.
            if (showOpsView)
            {
                Events["ShowOpsView"].guiActive = true;

                converter.Events["TransmitResearch"].guiActive       = false;
                converter.Events["PublishResearch"].guiActive        = false;
                converter.Events["SellResearch"].guiActive           = false;
                converter.Events["StartResourceConverter"].guiActive = false;
                converter.Events["StopResourceConverter"].guiActive  = false;
            }
        }
コード例 #7
0
        public override void OnStart(StartState state)
        {
            base.OnStart(state);

            //Grab the survey module
            orbitalSurveyer = this.part.FindModuleImplementing <ModuleOrbitalSurveyor>();
            orbitalScanner  = this.part.FindModuleImplementing <ModuleOrbitalScanner>();

            //Verify that the planet is really unlocked
            //verifyPlanetUnlock();

            //Hide stock survey GUI
            if (orbitalSurveyer != null)
            {
                orbitalSurveyer.Events["PerformSurvey"].guiActive          = false;
                orbitalSurveyer.Events["PerformSurvey"].guiActiveUnfocused = false;
                orbitalSurveyer.Events["PerformSurvey"].guiActiveEditor    = false;
            }

            //Create swizzler
            swizzler            = new WBIResultsDialogSwizzler();
            swizzler.onTransmit = transmitData;

            //Setup the science container
            scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();
            scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
            scienceContainer.Events["ReviewDataEvent"].guiActive          = false;

            //Now setup our own GUI
            botchedResultsMsg = this.part.partInfo.title + kSafeMode;
            SetupGUI();
        }
コード例 #8
0
        public void CollectData()
        {
            if (experiment == null)
            {
                return;
            }

            //Make sure that the active vessel has a robonaut.
            if (FlightGlobals.ActiveVessel.FindPartModuleImplementing <ModuleRobonaut>() == null)
            {
                ScreenMessages.PostScreenMessage(ModuleRobonaut.NoRobonautMsg, ModuleRobonaut.MessageDuration, ScreenMessageStyle.UPPER_CENTER);
                FlightLogger.fetch.LogEvent(ModuleRobonaut.NoRobonautMsg);
                return;
            }

            //Make sure we have a container
            ModuleScienceContainer scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();

            if (scienceContainer == null)
            {
                Debug.Log("[ModuleRobonautCleanResetExperiment] - ModuleScienceContainer not found.");
                return;
            }

            bool experienceEnabled = HighLogic.CurrentGame.Parameters.CustomParams <GameParameters.AdvancedParams>().EnableKerbalExperience;

            HighLogic.CurrentGame.Parameters.CustomParams <GameParameters.AdvancedParams>().EnableKerbalExperience = false;
            experiment.CollectDataExternalEvent();
            HighLogic.CurrentGame.Parameters.CustomParams <GameParameters.AdvancedParams>().EnableKerbalExperience = experienceEnabled;
        }
コード例 #9
0
        public bool StoreScience(ModuleScienceContainer container, ScienceSubject subject, float data)
        {
            if (container.capacity > 0 && container.GetScienceCount() >= container.capacity)
            {
                return(false);
            }

            if (container.GetStoredDataCount() != 0)
            {
                return(false);
            }

            float xmitValue = 0.85f;
            float labBoost  = 0.1f;

            ScienceData new_data = new ScienceData(data, xmitValue, labBoost, subject.id, subject.title);

            if (container.AddData(new_data))
            {
                return(true);
            }


            return(false);
        }
コード例 #10
0
        private void transferData(PartItemTransfer.DismissAction dismiss, Part p)
        {
            if (dismiss != PartItemTransfer.DismissAction.ItemMoved)
            {
                return;
            }

            if (p == null)
            {
                return;
            }

            if (handler == null)
            {
                return;
            }

            if (handler.GetScienceCount() <= 0)
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238567", part.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            ModuleScienceContainer container = p.FindModuleImplementing <ModuleScienceContainer>();

            if (container == null)
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_237432", part.partInfo.title, p.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            onTransferData(container);
        }
コード例 #11
0
        public void Activate()
        {
            active = true;
            bool alreadyCollect = false;

            foreach (ScienceAIContainerModule mod in vessel.FindPartModulesImplementing <ScienceAIContainerModule>())
            {
                if (mod.IsAutoCollect && !alreadyCollect)
                {
                    alreadyCollect = true;
                    container      = mod.part.FindModuleImplementing <ModuleScienceContainer>();
                    partID         = mod.part.persistentId;
                }
                else if (mod.IsAutoCollect && alreadyCollect)
                {
                    mod.IsAutoCollect = false;
                    mod.isEnabled     = false;
                }
                else
                {
                    mod.isEnabled = false;
                }
            }
            LoadScienceData();
            LoadScienceExperiments();
            SetScienceContainerStatus(false);
            SetScienceModuleStatus(false);
        }
コード例 #12
0
        private void OnExperimentsResultDialogClosed()
        {
            if (FlightGlobals.ActiveVessel != null)
            {
                // get all container modules on the vessel
                List <ModuleScienceContainer> containers = FlightGlobals.ActiveVessel.FindPartModulesImplementing <ModuleScienceContainer>();

                // iterate over the containers
                for (int containerIndex = 0; containerIndex < containers.Count; containerIndex++)
                {
                    ModuleScienceContainer container = containers[containerIndex];

                    // get all the experiment modules attached to the same part as the container
                    List <ModuleScienceExperiment> experiments = container.part.FindModulesImplementing <ModuleScienceExperiment>();

                    // iterate over the experiments
                    for (int experimentIndex = 0; experimentIndex < experiments.Count; experimentIndex++)
                    {
                        ModuleScienceExperiment experiment = experiments[experimentIndex];

                        // check that experiment has available data
                        if (experiment.GetScienceCount() > 0)
                        {
                            // get both the container and experiment data for duplicate checking
                            ScienceData[] containerDataArray  = container.GetData();
                            ScienceData[] experimentDataArray = experiment.GetData();

                            // iterate over the experiment data
                            foreach (ScienceData experimentData in experimentDataArray)
                            {
                                bool allowDataTransfer = true;

                                // check for duplicates in the container data
                                foreach (ScienceData containerData in containerDataArray)
                                {
                                    if (containerData.subjectID == experimentData.subjectID)
                                    {
                                        allowDataTransfer = false;

                                        // discard duplicates
                                        if (HighLogic.CurrentGame.Parameters.CustomParams <SMR>().discardDuplicates)
                                        {
                                            experiment.DumpData(experimentData);
                                        }
                                    }
                                }

                                // transfer data from experiment to container
                                if (allowDataTransfer)
                                {
                                    experiment.DumpData(experimentData);
                                    container.AddData(experimentData);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #13
0
 public void Transfer(ModuleScienceExperiment baseExperiment, ModuleScienceContainer moduleScienceContainer)
 {
     _AutomatedScienceSamplerInstance.Log(baseExperiment.experimentID, ": transfering");
     moduleScienceContainer.StoreData(new List <IScienceDataContainer>()
     {
         baseExperiment
     }, _AutomatedScienceSamplerInstance.craftSettings.dumpDuplicates);
 }
コード例 #14
0
ファイル: SciLabOpsWindow.cs プロジェクト: MrKiel/Pathfinder
 public void FindPartModules()
 {
     if (converter == null)
     {
         converter        = this.part.FindModuleImplementing <WBIScienceConverter>();
         sciLab           = this.part.FindModuleImplementing <ModuleScienceLab>();
         scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();
     }
 }
コード例 #15
0
 protected override void OnStart()
 {
     if (vessel.loaded && active)
     {
         ScienceAIContainerModule mod = vessel.FindPartModulesImplementing <ScienceAIContainerModule>().Where(m => m.IsAutoCollect == true).First();
         container = mod.part.FindModuleImplementing <ModuleScienceContainer>();
         partID    = mod.part.persistentId;
     }
 }
コード例 #16
0
        public void TransferExperiment(ModuleScienceExperiment exp, ModuleScienceContainer container, bool dumpRepeats)
        {
            // TODO Test TransferExperiment
            List <IScienceDataContainer> expList = new List <IScienceDataContainer>()
            {
                exp
            };

            container.StoreData(expList, dumpRepeats);
        }
コード例 #17
0
ファイル: WBIGeologyLab.cs プロジェクト: ozraven/Pathfinder
        protected override void onFailure()
        {
            if (scienceContainer == null)
            {
                scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();
            }

            //Reduce core sample count
            dumpFirstCoreSample();
        }
コード例 #18
0
        private void transferData(PartItemTransfer.DismissAction dismiss, Part p)
        {
            if (dismiss != PartItemTransfer.DismissAction.ItemMoved)
            {
                return;
            }

            if (p == null)
            {
                return;
            }

            if (dataList.Count <= 0)
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238567", part.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            ModuleScienceContainer container = p.FindModuleImplementing <ModuleScienceContainer>();

            if (container == null)
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238572", part.partInfo.title, p.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            if (!rerunnable)
            {
                List <DialogGUIBase> dialog = new List <DialogGUIBase>();
                dialog.Add(new DialogGUIButton <ModuleScienceContainer>(Localizer.Format("#autoLOC_7003412"), new Callback <ModuleScienceContainer>(onTransferData), container));
                dialog.Add(new DialogGUIButton(Localizer.Format("#autoLOC_236419"), null, true));

                PopupDialog.SpawnPopupDialog(
                    new Vector2(0.5f, 0.5f),
                    new Vector2(0.5f, 0.5f),
                    new MultiOptionDialog(
                        "DataWarning",
                        collectWarningText,
                        Localizer.Format("#autoLOC_238556", part.partInfo.title),
                        UISkinManager.defaultSkin,
                        dialog.ToArray()
                        ),
                    false,
                    UISkinManager.defaultSkin,
                    true,
                    ""
                    );
            }
            else
            {
                onTransferData(container);
            }
        }
コード例 #19
0
        private void transferData(PartItemTransfer.DismissAction dismiss, Part p)
        {
            if (dismiss != PartItemTransfer.DismissAction.ItemMoved)
            {
                return;
            }

            if (p == null)
            {
                return;
            }

            if (scienceReports.Count <= 0)
            {
                ScreenMessages.PostScreenMessage(string.Format("[{0}]: has no data to transfer.", part.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            ModuleScienceContainer container = p.FindModuleImplementing <ModuleScienceContainer>();

            if (container == null)
            {
                ScreenMessages.PostScreenMessage(string.Format("<color=orange>[{0}]: {1} has no data container, canceling transfer.<color>", part.partInfo.title, p.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            if (!rerunnable)
            {
                List <DialogGUIBase> dialog = new List <DialogGUIBase>();
                dialog.Add(new DialogGUIButton <ModuleScienceContainer>("Remove Data", new Callback <ModuleScienceContainer>(onTransferData), container));
                dialog.Add(new DialogGUIButton("Cancel", null, true));

                PopupDialog.SpawnPopupDialog(
                    new Vector2(0.5f, 0.5f),
                    new Vector2(0.5f, 0.5f),
                    new MultiOptionDialog(
                        "TransferWarning",
                        "Removing the experiment data will render this module inoperable.\n\nRestoring functionality will require a Scientist.",
                        part.partInfo.title + "Warning!",
                        UISkinManager.defaultSkin,
                        dialog.ToArray()
                        ),
                    false,
                    UISkinManager.defaultSkin,
                    true,
                    ""
                    );
            }
            else
            {
                onTransferData(container);
            }
        }
コード例 #20
0
 private static bool TargetAcceptsData(ModuleScienceContainer target, ScienceData data)
 {
     if (target.allowRepeatedSubjects)
     {
         Debug.Log(string.Format("Target {0} allows repeated subjects", target.part.partInfo.title));
         return(true);
     }
     if (target.HasData(data))
     {
         Debug.Log(string.Format("Target {0} already has data {1} and does not allow repeated subjects", target.part.partInfo.title, data.title));
         return(false);
     }
     return(true);
 }
コード例 #21
0
        public override void OnStart(PartModule.StartState state)
        {
            if (HighLogic.LoadedSceneIsFlight)
            {
                if (IsPrimary)
                {
                    Debug.Log("RoverScience 2 initiated!");
                    Debug.Log("RoverScience version: " + RSVersion);

                    Instance = this;

                    Debug.Log("RS Instance set - " + Instance);

                    container = part.Modules ["ModuleScienceContainer"] as ModuleScienceContainer;
                    command   = part.Modules ["ModuleCommand"] as ModuleCommand;

                    // Must be called here otherwise they won't run their constructors for some reason
                    if (rover == null)
                    {
                        Debug.Log("rover was null, creating new rover class (OnStart)");
                        rover = new Rover();
                    }
                    rover.scienceSpot = new ScienceSpot(Instance);
                    rover.landingSpot = new LandingSpot(Instance);

                    //try
                    //{
                    if (DB != null)
                    {
                        DB.updateRoverScience();
                    }
                    //}
                    //catch { }

                    rover.setClosestAnomaly(vessel.mainBody.bodyName);
                }
                else
                {
                    Debug.Log("ONSTART - Not primary");
                }

                if (Instance == null)
                {
                    Instance = this;
                    Debug.Log("Instance was null; workaround fix by declaring Instance anyway");
                }
            }
        }
コード例 #22
0
ファイル: ModuleKomet.cs プロジェクト: HebaruSan/KerbalKomets
        protected void keepResults(ScienceData data)
        {
            //Give data to the kerbal on EVA
            if (FlightGlobals.ActiveVessel.isEVA)
            {
                ModuleScienceContainer container = FlightGlobals.ActiveVessel.FindPartModuleImplementing <ModuleScienceContainer>();

                if (container != null)
                {
                    container.AddData(data);
                }

                Events["TakeKometSample"].active = false;
                sampleAcquired = true;
            }
        }
コード例 #23
0
 private static void AddToSelectionView()
 {
     GUILayout.Label(Resources.ToContainerViewTitle);
     toScrollViewScrollPosition = GUILayout.BeginScrollView(toScrollViewScrollPosition, GUILayout.Width(300));
     GUILayout.BeginVertical();
     foreach (ModuleScienceContainer sc in containers)
     {
         var style = sc == SelectedPartTarget ? Resources.ButtonToggledRedStyle : Resources.ButtonStyle;
         if (GUILayout.Button(formatContainer(sc), style, GUILayout.Width(265)))
         {
             SelectedPartTarget = sc;
         }
     }
     GUILayout.EndVertical();
     GUILayout.EndScrollView();
 }
コード例 #24
0
        internal void OnAutoCollectChanged(BaseField field, System.Object obj)
        {
            ScienceAIVesselModule  mod       = vessel.GetComponent <ScienceAIVesselModule>();
            ModuleScienceContainer container = part.FindModuleImplementing <ModuleScienceContainer>();

            if (IsAutoCollect)
            {
                container.CollectAllEvent();
                mod.collectEmpty = IsCollectEmpty;
                mod.reusableOnly = IsReusableOnly;
                mod.Activate();
            }
            else
            {
                mod.Deactivate();
            }
        }
コード例 #25
0
        private static void TransferScience(IScienceDataContainer source, ModuleScienceContainer target)
        {
            if (source == null || target == null || source == target)
            {
                return;
            }

            ScienceData[] sd = source.GetData();
            if (sd == null || sd.Length == 0)
            {
                Debug.Log("No data ");
                return;
            }

            if (source is ModuleScienceContainer)
            {
                foreach (ScienceData data in sd)
                {
                    if (TargetAcceptsData(target, data))
                    {
                        if (target.AddData(data))
                        {
                            ((ModuleScienceContainer)source).RemoveData(data);
                        }
                        else
                        {
                            Debug.Log("Transfer fail");
                        }
                    }
                }
            }
            else if (source is ModuleScienceExperiment)
            {
                if (TargetAcceptsData(target, sd[0]))
                {
                    if (target.AddData(sd[0]))
                    {
                        ((ModuleScienceExperiment)source).DumpData(sd[0]);
                    }
                    else
                    {
                        Debug.Log("Transfer fail");
                    }
                }
            }
        }
コード例 #26
0
        public override void OnStart(PartModule.StartState state)
        {
            if (HighLogic.LoadedSceneIsFlight)
            {
                if (IsPrimary)
                {
                    Utilities.Log("Initiated! Version: " + RSVersion);

                    Instance = this;

                    Utilities.LogVerbose("RS Instance set - " + Instance);

                    HomeWorld = FlightGlobals.Bodies.Where(cb => cb.isHomeWorld).First(); // TODO: move this somewhere more appropriate

                    container = part.Modules ["ModuleScienceContainer"] as ModuleScienceContainer;
                    command   = part.Modules ["ModuleCommand"] as ModuleCommand;

                    // HACK: Must be called here otherwise they won't run their constructors for some reason
                    if (rover == null)
                    {
                        Utilities.LogVerbose("rover was null, creating new rover class (OnStart)");
                        rover = new Rover();
                    }
                    rover.scienceSpot = new ScienceSpot(Instance);
                    rover.landingSpot = new LandingSpot(Instance);

                    if (DB != null)
                    {
                        DB.UpdateRoverScience();
                    }

                    rover.SetClosestAnomaly();
                }
                else
                {
                    Utilities.Log("ONSTART - Not primary");
                }

                // HACK: instance null unexpected.
                if (Instance == null)
                {
                    Instance = this;
                    Utilities.Log("Instance was null; workaround fix by declaring Instance anyway");
                }
            }
        }
コード例 #27
0
ファイル: WBIGeologyLab.cs プロジェクト: ozraven/Pathfinder
        protected void dumpFirstCoreSample()
        {
            if (scienceContainer == null)
            {
                scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();
            }

            ScienceData[] dataList = scienceContainer.GetData();

            foreach (ScienceData data in dataList)
            {
                if (data.subjectID.Contains("WBICoreSampleAnalysis") || data.subjectID.Contains(WBIBiomeAnalysis.kBiomeAnalysisID))
                {
                    scienceContainer.DumpData(data);
                    return;
                }
            }
        }
コード例 #28
0
ファイル: WBIPathfinderLab.cs プロジェクト: MrKiel/Pathfinder
        protected override void setupPartModules()
        {
            base.setupPartModules();

            //Setup the science container
            if (scienceContainer == null)
            {
                scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();
                scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
                scienceContainer.Events["ReviewDataEvent"].guiActive          = false;

                //Terrain uplink
                terrainUplinkView.part             = this.part;
                terrainUplinkView.scienceContainer = scienceContainer;
            }

            //Kerbnet access
            kerbNetAccess = this.part.FindModuleImplementing <ModuleKerbNetAccess>();
            if (kerbNetAccess != null)
            {
            }

            //Grab the seismometer (if any)
            foreach (PartModule mod in this.part.Modules)
            {
                if (mod.moduleName == "Seismometer")
                {
                    impactSeismometer = mod;
                    impactSensor      = (IScienceDataContainer)impactSeismometer;
                    ScienceData[] impactData = impactSensor.GetData();

                    foreach (ScienceData data in impactData)
                    {
                        scienceContainer.AddData(data);
                    }
                    foreach (ScienceData doomed in impactData)
                    {
                        impactSensor.DumpData(doomed);
                    }
                    break;
                }
            }
        }
コード例 #29
0
        private void onTransferData(ModuleScienceContainer target)
        {
            if (target == null)
            {
                return;
            }

            int i = handler.GetScienceCount();

            if (target.StoreData(new List <IScienceDataContainer> {
                this
            }, false))
            {
                ScreenMessages.PostScreenMessage(string.Format("[{0}]: {1} Data stored.", target.part.partInfo.title, i), 6, ScreenMessageStyle.UPPER_LEFT);
            }
            else
            {
                ScreenMessages.PostScreenMessage(string.Format("<color=orange>[{0}]: Not all data was stored.</color>", target.part.partInfo.title), 6, ScreenMessageStyle.UPPER_LEFT);
            }
        }
コード例 #30
0
        private void onTransferData(ModuleScienceContainer target)
        {
            if (target == null)
            {
                return;
            }

            int i = dataList.Count;

            if (target.StoreData(new List <IScienceDataContainer> {
                this
            }, false))
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238582", target.part.partInfo.title), 6, ScreenMessageStyle.UPPER_LEFT);
            }
            else
            {
                ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238589", target.part.partInfo.title), 6, ScreenMessageStyle.UPPER_LEFT);
            }
        }
コード例 #31
0
ファイル: WhichData.cs プロジェクト: SixHourDays/WhichData
        public void OnPMGatherData(ModuleScienceContainer cont)
        {
            List<DataPage> moveable = new List<DataPage>();
            moveable.AddRange(m_activeShip.m_experiScienceDatas);

            //partial selection: discard repeats wrt container
            moveable = PruneDuplicates(cont, moveable);

            m_activeShip.ProcessMoveDatas(cont, moveable, m_activeShip.MoveEnd);
        }
コード例 #32
0
ファイル: WhichData.cs プロジェクト: SixHourDays/WhichData
 public List<DataPage> PruneDuplicates(ModuleScienceContainer dst, List<DataPage> pages)
 {
     //partial selection: discard repeats wrt container
     if (!dst.allowRepeatedSubjects)
     {
         int duplicates = pages.RemoveAll(dp => dst.HasData(dp.m_scienceData));
         if (duplicates > 0) { WarnMessage("Can't move " + duplicates + " results, identical ones in destination."); }
     }
     return pages;
 }
コード例 #33
0
ファイル: WhichData.cs プロジェクト: SixHourDays/WhichData
        public void UpdateExternMove(int reviewIndex, ModuleScienceContainer dst, Action endFunc)
        {
            int i = reviewIndex;
            List<DataPage> selection = m_selectedLists[i];
            GUIView view = m_guiViews[i];

            view.Update();

            //lock appropriate actions for selection that [we set to/user clicked on] the view
            if (m_selectedDirty[i] || view.m_dirtySelection)
            {
                Debug.Log("GA controller active selection button locking");

                //when user has changed selection
                if (!m_selectedDirty[i])
                {
                    selection.Clear();
                    selection.AddRange(view.selectedDataPages);
                }

                //knowing dst up front, we can screen for repeats wrt container
                if (dst.allowRepeatedSubjects) { m_moveEnabled = true; }
                else { m_moveEnabled = selection.Exists(dp => !dst.HasData(dp.m_scienceData)); }
                //scientists can additionally use discard
                m_discardEnabled = m_activeShip.m_scientistAboard;
                //in collect mode, we disallow lab and transmit
                m_labEnabled = m_transEnabled = false;

                //locks as told, and clears view dirty select flag
                view.SetViewInfo(m_discardEnabled, m_moveEnabled, m_labEnabled, m_transEnabled);
                m_selectedDirty[i] = false;
            }

            //action button handling
            if (view.m_closeBtn)
            {
                CloseDialog();
            }

            //TODOJEFFGIFFEN should use reset on showReset bool
            if (view.m_discardBtn && m_discardEnabled)
            {
                m_shipModels[i].ProcessDiscardDatas(selection, ExternDiscardEnd);
                CloseDialog();
            }

            //move btn
            if (view.m_moveBtn && m_moveEnabled)
            {
                //partial selection: discard repeats wrt container
                selection = PruneDuplicates(dst, selection);

                m_shipModels[i].ProcessMoveDatas(dst, selection, endFunc);
                CloseDialog();
            }
        }
コード例 #34
0
 private void updateExperimentList()
 {
     experimentList = currentVessel.FindPartModulesImplementing<ModuleScienceExperiment>();
       containerList = currentVessel.FindPartModulesImplementing<ModuleScienceContainer>();
       foreach (ModuleScienceContainer currentContainer in containerList)
       {
     addToExpermientedList(currentContainer.GetData());
     toolbarStrings.Add(currentContainer.part.partInfo.title);
       }
       if ((container == null || container.vessel != currentVessel) && containerList != null && containerList.Count > 0)
     container = containerList[0];
 }
コード例 #35
0
 private void transferScience(ModuleScienceContainer container)
 {
     container.StoreData(containers, false);
     ScreenMessages.PostScreenMessage(scienceTransferSuccess, transferMessage);
     Dismiss(CrewTransfer.DismissAction.CrewMoved);
 }
コード例 #36
0
ファイル: WBIGeologyLab.cs プロジェクト: Bear67/Pathfinder
        protected override void onFailure()
        {
            if (scienceContainer == null)
                scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();

            //Reduce core sample count
            dumpFirstCoreSample();
        }
コード例 #37
0
ファイル: WBIGeologyLab.cs プロジェクト: Bear67/Pathfinder
        public override void OnStart(StartState state)
        {
            base.OnStart(state);
            SetGuiVisible(false);
            showResults = false;

            resourceList = ResourceMap.Instance.GetResourceItemList(HarvestTypes.Planetary, this.part.vessel.mainBody);

            gps = this.part.FindModuleImplementing<ModuleGPS>();
            biomeScanner = this.part.FindModuleImplementing<ModuleBiomeScanner>();
            hideStockGUI();

            //Grab the seismometer (if any)
            foreach (PartModule mod in this.part.Modules)
                if (mod.moduleName == "Seismometer")
                {
                    impactSeismometer = mod;
                    impactSensor = (IScienceDataContainer)impactSeismometer;
                    break;
                }

            //Create swizzler
            swizzler = new WBIResultsDialogSwizzler();
            swizzler.onTransmit = transmitData;

            //Setup the science container
            scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();
            scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
            scienceContainer.Events["ReviewDataEvent"].guiActive = false;

            if (impactSensor != null)
            {
                ScienceData[] impactData = impactSensor.GetData();

                foreach (ScienceData data in impactData)
                    scienceContainer.AddData(data);
                foreach (ScienceData doomed in impactData)
                    impactSensor.DumpData(doomed);
            }

            //Terrain uplink
            terrainUplinkView.part = this.part;
            terrainUplinkView.scienceContainer = scienceContainer;

            //Elapsed time for current experiment
            if (ModuleIsActive())
            {
                //Get the new elapsed time.
                int elapsedTimeIndex = (int)currentExperiment;
                elapsedTime = elapsedTimes[elapsedTimeIndex];

                //Reset the research start time.
                cycleStartTime = Planetarium.GetUniversalTime() - elapsedTime;
            }

            CBAttributeMapSO.MapAttribute biome = Utils.GetCurrentBiome(this.part.vessel);
            biomeName = biome.name;

            if (this.part.vessel.situation == Vessel.Situations.LANDED || this.part.vessel.situation == Vessel.Situations.SPLASHED || this.part.vessel.situation == Vessel.Situations.PRELAUNCH)
            {
                planetID = this.part.vessel.mainBody.flightGlobalsIndex;
                harvestType = (HarvestTypes)harvestID;
            }
        }
コード例 #38
0
ファイル: WBIGeologyLab.cs プロジェクト: Bear67/Pathfinder
        protected void dumpFirstCoreSample()
        {
            if (scienceContainer == null)
                scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();

            ScienceData[] dataList = scienceContainer.GetData();

            foreach (ScienceData data in dataList)
            {
                if (data.subjectID.Contains("WBICoreSampleAnalysis") || data.subjectID.Contains(WBIBiomeAnalysis.kBiomeAnalysisID))
                {
                    scienceContainer.DumpData(data);
                    return;
                }
            }
        }
コード例 #39
0
    void drawContainer(ModuleScienceContainer container)
    {
        bool hasData = container.GetData().Length > 0;
        if (!hasData) { return; }

        var list = new List<ScienceData>(container.GetData());
        list.Sort(delegate(ScienceData a, ScienceData b) { return string.Compare(a.title, b.title); });

        foreach (var data in list) {
            var sv = simulateScience(data);
            var tsv = simulateScience(data, true);
            dataAmount += data.dataAmount;
            returnScience += sv;
            transmitScience += tsv;
            string stats = string.Format("( {0:F1} / {1:F1} )", sv, tsv);

            GUILayout.BeginVertical();

            GUILayout.BeginHorizontal(GUILayout.MaxHeight(18));
            GUILayout.Label(container.part.partInfo.title + (stats != "" ? " - " + stats : ""), styleTitle);
            GUILayout.Label(data.title, styleTitle);
            GUILayout.EndHorizontal();

            GUILayout.EndVertical();
        }
    }
コード例 #40
0
ファイル: GeoSurveyCamera.cs プロジェクト: PalverZ/Pathfinder
        public override void OnStart(StartState state)
        {
            base.OnStart(state);

            //Grab the survey module
            orbitalSurveyer = this.part.FindModuleImplementing<ModuleOrbitalSurveyor>();
            orbitalScanner = this.part.FindModuleImplementing<ModuleOrbitalScanner>();

            //Verify that the planet is really unlocked
            //verifyPlanetUnlock();

            //Hide stock survey GUI
            if (orbitalSurveyer != null)
            {
                orbitalSurveyer.Events["PerformSurvey"].guiActive = false;
                orbitalSurveyer.Events["PerformSurvey"].guiActiveUnfocused = false;
                orbitalSurveyer.Events["PerformSurvey"].guiActiveEditor = false;
            }

            //Create swizzler
            swizzler = new WBIResultsDialogSwizzler();
            swizzler.onTransmit = transmitData;

            //Setup the science container
            scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();
            scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
            scienceContainer.Events["ReviewDataEvent"].guiActive = false;

            //Now setup our own GUI
            botchedResultsMsg = kSafeMode;
            SetupGUI();
        }
コード例 #41
0
ファイル: WhichData.cs プロジェクト: SixHourDays/WhichData
 //only external containers allow store
 public void OnPMEvaStoreWhichData(ModuleScienceContainer container, float sqrRange)
 {
     m_dialogModule = container;
     m_dialogSqrRange = sqrRange;
     m_externStoreEvent = true;
 }
コード例 #42
0
ファイル: WBIGeologyLab.cs プロジェクト: Bear67/Pathfinder
        protected override void onSuccess()
        {
            if (scienceContainer == null)
                scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();

            //Time to pay the piper
            if (currentExperiment == GeologyLabExperiments.BiomeAnalysis)
            {
                if (ResearchAndDevelopment.Instance.Science >= kBiomeResearchCost)
                {
                    ResearchAndDevelopment.Instance.AddScience(-kBiomeResearchCost, TransactionReasons.RnDTechResearch);
                }

                //Not enough science. Efforts wasted.
                else
                {
                    ScreenMessages.PostScreenMessage(kNotEnoughScience, 5.0f, ScreenMessageStyle.UPPER_CENTER);
                    StopConverter();
                    return;
                }

                //Generate biome analysis
                ScienceData data = WBIBiomeAnalysis.CreateData(this.part, kBiomeResearchCost);
                scienceContainer.AddData(data);
            }

            else
            {
                float efficiencyModifier = 0.1f + (totalCrewSkill / 200f);

                applyResults(efficiencyModifier, kBetterEfficiency);

                //Reduce core sample count
                dumpFirstCoreSample();
            }
        }
コード例 #43
0
ファイル: WBIGeologyLab.cs プロジェクト: Bear67/Pathfinder
        protected override void onCriticalFailure()
        {
            if (scienceContainer == null)
                scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();

            applyResults(-0.1f, kWorseEfficiency);

            //Time to pay the piper
            if (currentExperiment == GeologyLabExperiments.BiomeAnalysis)
            {
                if (ResearchAndDevelopment.Instance.Science >= kBiomeResearchCost)
                    ResearchAndDevelopment.Instance.AddScience(-kBiomeResearchCost, TransactionReasons.RnDTechResearch);
            }

            //Reduce core sample count
            dumpFirstCoreSample();
        }
コード例 #44
0
ファイル: ForScience.cs プロジェクト: RealGrep/ForScience
        private void TransferScience()
        {
            containerList = currentVessel.FindPartModulesImplementing<ModuleScienceContainer>();
            experimentList = currentVessel.FindPartModulesImplementing<ModuleScienceExperiment>();

            if (container == null) container = containerList[0];

            Debug.Log("[For Science] Tranfering science to container.");
            container.StoreData(experimentList.Cast<IScienceDataContainer>().ToList(), true);

            IsDataToCollect = false;
        }
コード例 #45
0
ファイル: WBIGeologyLab.cs プロジェクト: PalverZ/Pathfinder
        protected void setupPartModules()
        {
            //GPS
            if (gps == null)
            {
                gps = this.part.FindModuleImplementing<ModuleGPS>();
                gps.Fields["bioName"].guiActive = false;
                gps.Fields["body"].guiActive = false;
                gps.Fields["lat"].guiActive = false;
                gps.Fields["lon"].guiActive = false;
            }

            //Biome Scanner
            if (biomeScanner == null)
            {
                biomeScanner = this.part.FindModuleImplementing<ModuleBiomeScanner>();
                biomeScanner.Events["RunAnalysis"].guiActive = false;
                biomeScanner.Events["RunAnalysis"].guiActiveUnfocused = false;
            }

            //Setup the science container
            if (scienceContainer == null)
            {
                scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();
                scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();
                scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
                scienceContainer.Events["ReviewDataEvent"].guiActive = false;

                //Terrain uplink
                terrainUplinkView.part = this.part;
                terrainUplinkView.scienceContainer = scienceContainer;
            }

            //Grab the seismometer (if any)
            foreach (PartModule mod in this.part.Modules)
                if (mod.moduleName == "Seismometer")
                {
                    impactSeismometer = mod;
                    impactSensor = (IScienceDataContainer)impactSeismometer;
                    ScienceData[] impactData = impactSensor.GetData();

                    foreach (ScienceData data in impactData)
                        scienceContainer.AddData(data);
                    foreach (ScienceData doomed in impactData)
                        impactSensor.DumpData(doomed);
                    break;
                }

            //Resource list
            if (resourceList == null)
                resourceList = ResourceMap.Instance.GetResourceItemList(HarvestTypes.Planetary, this.part.vessel.mainBody);
            else if (resourceList.Count == 0)
                resourceList = ResourceMap.Instance.GetResourceItemList(HarvestTypes.Planetary, this.part.vessel.mainBody);
        }