Esempio n. 1
0
        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();
        }
Esempio n. 3
0
        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}");
            }
        }
Esempio n. 4
0
        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());
            }
        }
Esempio n. 5
0
        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;
        }