private static String GenerateName() { _shipType = VesselType.Unknown; Part p = VesselNaming.FindPriorityNamePart(EditorLogic.fetch.ship); if (p != null) { _shipType = p.vesselNaming.vesselType; } else { _shipType = VesselType.Unknown; foreach (var part in EditorLogic.fetch.ship.Parts) { foreach (var m in part.Modules) { if (m is ModuleCommand) { part.vesselNaming = new VesselNaming(); part.vesselNaming.namingPriority = 10; if (part.CrewCapacity == 0) { part.vesselNaming.vesselType = VesselType.Probe; } else { part.vesselNaming.vesselType = VesselType.Ship; } _shipType = part.vesselNaming.vesselType; break; } } if (_shipType != VesselType.Unknown) { break; } } if (_shipType == VesselType.Unknown) { return(""); } } bool scr = false; switch (_lang) { case 1: scr = true; break; case 2: scr = (Ran.Next(2) == 1); break; } return(ParsePattern(Choose(_patterns), scr)); }
void myonVesselNamingAccept(string newVesselName, VesselType newVesselType, int newPriority) { if (!Vessel.IsValidVesselName(newVesselName)) { return; } if (vesselNaming == null) { vesselNaming = new VesselNaming(); } vesselNaming.vesselName = newVesselName; vesselNaming.vesselType = newVesselType; vesselNaming.namingPriority = newPriority; GameEvents.onPartVesselNamingChanged.Fire(this); myonVesselNamingDismiss(); }
public void HandleVesselNaming(Vessel vessel) { // if this got run before the scenario was created, don't do anything if (SidExProjectManagerScenario.Instance == null) { return; } // if by some chance we don't have a vessel, just bug out if (vessel == null) { return; } Log.Write($"Handling naming on {vessel.vesselName}"); // set up shared numbering Dictionary <string, int> sharedNumberingProjects = new Dictionary <string, int>(); // this would be a ship created without vesselnaming configured //if (vessel.FindPartModulesImplementing<VesselNaming>().Count == 0) { if (vessel.parts.FindAll(x => x.vesselNaming != null).Count == 0) { // handle unlikely events if (string.IsNullOrEmpty(vessel.vesselName)) { return; } string tag, countRoman; if (!ConvertName(vessel.vesselName, ref sharedNumberingProjects, out tag, out countRoman)) { return; } // apply the new name vessel.vesselName = string.Format("{0} {1}", tag, countRoman); Log.Write($"Renaming vessel to {vessel.vesselName}"); // all done return; } // for (int i = 0; i < vessel.parts.Count(); i++) // Log.Write($"\tParts list: [{1}] {2} '{3}'", i, vessel.parts[i].partName, vessel.parts[i].vesselNaming == null ? "null" : vessel.parts[i].vesselNaming.vesselName); // we won't rename the vessel at the end if we don't modify it bool hasBeenModified = false; foreach (Part part in vessel.parts.FindAll(x => x.vesselNaming != null && x.vesselNaming.vesselName.Contains("["))) { string partName = part.vesselNaming.vesselName; // Log.Write($"Found part with vesselnaming {1} '{2}'", part.partName, part.vesselNaming.vesselName); // handle unlikely events if (string.IsNullOrEmpty(partName)) { continue; } string tag, countRoman; if (!ConvertName(partName, ref sharedNumberingProjects, out tag, out countRoman)) { continue; } // apply the new name to this part part.vesselNaming.vesselName = string.Format("{0} {1}", tag, countRoman); Log.Write($"Renaming tagged part {part.partName} to {part.vesselNaming.vesselName}"); hasBeenModified = true; } // finally rename the whole vessel if (hasBeenModified) { vessel.vesselName = VesselNaming.FindPriorityNamePart(vessel).vesselNaming.vesselName; Log.Write($"Renaming vessel to {vessel.vesselName}"); } }
private void WindowGui(int windowId) { try { var mySty = new GUIStyle(GUI.skin.button); mySty.normal.textColor = mySty.focused.textColor = Color.white; mySty.hover.textColor = mySty.active.textColor = Color.yellow; mySty.onNormal.textColor = mySty.onFocused.textColor = mySty.onHover.textColor = mySty.onActive.textColor = Color.green; mySty.padding = new RectOffset(8, 8, 8, 8); GUILayout.BeginVertical(); String generateButtonText = ""; if (languageSelected) { GUILayout.Label("Here are the KSC staff members' suggestions:", GUILayout.ExpandWidth(true)); foreach (String s in _generatedNames) { if (GUILayout.Button(s, mySty, GUILayout.ExpandWidth(true))) { EditorLogic.fetch.shipNameField.text = s; Part p = VesselNaming.FindPriorityNamePart(EditorLogic.fetch.ship); p.vesselNaming.vesselName = s; toolbarControl.SetFalse(true); } } generateButtonText = "Fire those guys!"; GUILayout.Space(16); } else { generateButtonText = "What should we call this?"; GUILayout.Label("Language: ", GUILayout.ExpandWidth(true)); String[] langOpts = { "English", "Kerbal", "Both" }; _lang = GUILayout.SelectionGrid(_lang, langOpts, 1, "toggle", GUILayout.ExpandWidth(true)); GUILayout.Space(16); } //GUILayout.Button is "true" when clicked if (GUILayout.Button(generateButtonText, mySty, GUILayout.ExpandWidth(true))) { for (int i = 0; i < _generatedNames.Length; i++) { _generatedNames[i] = GenerateName(); } if (!languageSelected) { languageSelected = true; } //else // _generated = true; } GUILayout.EndVertical(); GUI.DragWindow(); } catch (Exception ex) { Debug.LogError(ex.ToString()); } }
public void FixedUpdate() { // only run every 150 updates - prevent spamming experiments before they can even finish running timerCounter++; if (timerCounter < (60 * 2.5)) { return; } timerCounter = 0; // TODO: cache vessel and situation and biome, when any of these change reset the dirty marker. When dirty, run every 150 (60*2.5) updates until no more is left to do (all science done, experiment data transferred / reviewed, experiments reset if needed) then mark not dirty. If not dirty, do nothing until dirty again. currentVessel = FlightGlobals.ActiveVessel; if (currentVessel == null) { return; } currentCelestial = currentVessel.mainBody; currentSituation = GetExperimentSituations(currentVessel); currentBiome = GetCurrentBiome(currentVessel); mode = CheckMode(); if (mode != _lastMode) { Log.Write($"Updated mode to {mode.ToString()}"); } if (mode == Modes.None) { return; } // get out of here if there's nothing to do (CheckMode is also necessary to be first to ensure it runs as we need to update the mode regardless of anything else) if (!_dirty) { if (mode != _lastMode) { Log.Write($"Mode changed, marking dirty"); _dirty = true; } else if (_lastVessel == null || _lastVessel != currentVessel) { Log.Write($"Vessel changed, marking dirty"); _dirty = true; } else if (_lastCelestial != currentCelestial) { Log.Write($"Celestial changed, marking dirty"); _dirty = true; } else if (_lastSituation != currentSituation) { Log.Write($"Situation changed, marking dirty"); _dirty = true; } else if (!_lastBiome.Equals(currentBiome)) { Log.Write($"Biome changed, marking dirty"); _dirty = true; } } if (!_dirty) { Log.Write($"Nothing to do, waiting for next update..."); return; } // don't run if we don't have control of the vessel if (!currentVessel.IsControllable) { return; } //if (currentVessel == _lastVessel && currentSituation == _lastSituation && currentBiome == _lastBiome) // return; //_lastVessel = currentVessel; //_lastSituation = currentSituation; //_lastBiome = currentBiome; // use the priority naming part if possible (will be null if vessel isn't saved) otherwise first found part with our module Part controlPart = VesselNaming.FindPriorityNamePart(currentVessel) ?? currentVessel.parts.Find(x => x.Modules.Contains("SideliasScienceAIPartModule")); if (controlPart == null) // whelp, guess we're not needed here { return; } if (!((SidExScienceAIPartModule)controlPart.Modules["SideliasScienceAIPartModule"]).enableScienceAIOnThisVessel) // we're presently disabled. { return; } //// get a list of all science experiments //List<Part> moduleScienceExperimentParts = currentVessel.Parts.FindAll(x => x.Modules.Contains("ModuleScienceExperiment")); //foreach (Part moduleScienceExperimentPart in moduleScienceExperimentParts) { // foreach (ModuleScienceExperiment moduleScienceExperiment in moduleScienceExperimentPart.Modules.GetModules<ModuleScienceExperiment>()) // RunExperiment(moduleScienceExperiment); //} //Log.Write($"Attempting to find a science data transfer target..."); //ModuleScienceContainer commandPartScienceContainer = null; //foreach (PartModule pm in controlPart.Modules) { // if ((pm as ModuleScienceContainer) != null) { // Log.Write($" Found option in part: {controlPart.partName}/{pm.moduleName}..."); // commandPartScienceContainer = pm as ModuleScienceContainer; // } //} Log.Write($"Checking on-board science experiments"); // attempt #2 to include dmagic _dirty = false; foreach (ModuleScienceExperiment moduleScienceExperiment in currentVessel.FindPartModulesImplementing <ModuleScienceExperiment>()) { if (RunExperiment(moduleScienceExperiment)) { _dirty = true; } } Log.Write($"Marking us {(_dirty ? "dirty" : "not dirty")}"); _lastVessel = currentVessel; _lastCelestial = currentCelestial; _lastSituation = currentSituation; _lastBiome = currentBiome; _lastMode = mode; }