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) { } }
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); }
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); }
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(); }
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; } }
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; } }
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(); }
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; }
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); }
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); }
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); }
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); } } } } } } }
public void Transfer(ModuleScienceExperiment baseExperiment, ModuleScienceContainer moduleScienceContainer) { _AutomatedScienceSamplerInstance.Log(baseExperiment.experimentID, ": transfering"); moduleScienceContainer.StoreData(new List <IScienceDataContainer>() { baseExperiment }, _AutomatedScienceSamplerInstance.craftSettings.dumpDuplicates); }
public void FindPartModules() { if (converter == null) { converter = this.part.FindModuleImplementing <WBIScienceConverter>(); sciLab = this.part.FindModuleImplementing <ModuleScienceLab>(); scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>(); } }
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; } }
public void TransferExperiment(ModuleScienceExperiment exp, ModuleScienceContainer container, bool dumpRepeats) { // TODO Test TransferExperiment List <IScienceDataContainer> expList = new List <IScienceDataContainer>() { exp }; container.StoreData(expList, dumpRepeats); }
protected override void onFailure() { if (scienceContainer == null) { scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>(); } //Reduce core sample count dumpFirstCoreSample(); }
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); } }
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); } }
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); }
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"); } } }
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; } }
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(); }
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(); } }
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"); } } } }
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"); } } }
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; } } }
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; } } }
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); } }
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); } }
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); }
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; }
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(); } }
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]; }
private void transferScience(ModuleScienceContainer container) { container.StoreData(containers, false); ScreenMessages.PostScreenMessage(scienceTransferSuccess, transferMessage); Dismiss(CrewTransfer.DismissAction.CrewMoved); }
protected override void onFailure() { if (scienceContainer == null) scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>(); //Reduce core sample count dumpFirstCoreSample(); }
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; } }
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; } } }
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(); } }
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(); }
//only external containers allow store public void OnPMEvaStoreWhichData(ModuleScienceContainer container, float sqrRange) { m_dialogModule = container; m_dialogSqrRange = sqrRange; m_externStoreEvent = true; }
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(); } }
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(); }
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; }
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); }