コード例 #1
0
        public void DrawParamsWindow(int WindowID)
        {
            ChecklistItem item = activeChecklist.items.Find(p => p.paramsDisplayed);

            GUILayout.BeginVertical(GUILayout.Width(200));
            GUILayout.BeginHorizontal(GUILayout.ExpandHeight(false));
            GUILayout.Label("Item: " + item.name + "\n<color=#ffd333ff>" + (item.allRequired ? "All criteria met required" : "One criterion met suffices") + "</color>");
            GUILayout.FlexibleSpace();
            GUILayout.Label("►");
            GUILayout.EndHorizontal();
            item.criteria.ForEach(c => c.tempParam = c.paramsGUIFunction(c));

            if (item.criteria.TrueForAll(c => c.paramValid))
            {
                if (GUILayout.Button("Done", HighLogic.Skin.button))
                {
                    item.paramsDisplayed = false;
                    item.criteria.ForEach(c => c.parameter = c.tempParam);
                    CheckVessel();
                }
            }
            else
            {
                GUILayout.Label("<color=#FF1111FF><b> ! Some paramaters are invalid !</b></color>", centredLabel);
            }
            activeChecklist.items[activeChecklist.items.IndexOf(item)] = item;
            GUILayout.EndVertical();
            MainInstance.SetTooltipText();
        }
コード例 #2
0
        public bool LoadChecklists()
        {
            try
            {
                if (WernherChecker.Instance.Settings.cfgLoaded)
                {
                    availableChecklists.Clear();
                    foreach (ConfigNode checklistNode in WernherChecker.Instance.Settings.cfg.GetNodes("CHECKLIST"))
                    {
                        Log.Info("Parsing checklist - " + checklistNode.GetValue("name"));
                        Checklist parsedChecklist = new Checklist();
                        parsedChecklist.items = new List <ChecklistItem>();
                        parsedChecklist.name  = checklistNode.GetValue("name");
                        if (checklistNode.HasValue("scene"))
                        {
                            var scene = checklistNode.GetValue("scene");

                            parsedChecklist.editorOnly = (scene == "editor");
                            parsedChecklist.flightOnly = (scene == "flight");
                        }
                        ///Begining item cycle
                        foreach (ConfigNode itemNode in checklistNode.GetNodes("CHECKLIST_ITEM"))
                        {
                            //Log.Info("parsing item " + itemNode.GetValue("name"));
                            ChecklistItem parsedItem = new ChecklistItem();
                            parsedItem.criteria = new List <Criterion>();
                            parsedItem.name     = itemNode.GetValue("name");
                            if (itemNode.HasValue("scene"))
                            {
                                var scene = itemNode.GetValue("scene");

                                parsedItem.editorOnly = (scene == "editor");
                                parsedItem.flightOnly = (scene == "flight");
                            }
                            if (!bool.TryParse(itemNode.GetValue("isManual"), out parsedItem.isManual))
                            {
                                parsedItem.isManual = false;
                            }
                            if (!bool.TryParse(itemNode.GetValue("allRequired"), out parsedItem.allRequired))
                            {
                                parsedItem.allRequired = true;
                            }
                            ;

                            //Begining criterion cycle
                            foreach (ConfigNode criterionNode in itemNode.GetNodes("CRITERION"))
                            {
                                //Log.Info("parsing criterion of type " + criterionNode.GetValue("type"));
                                Criterion parsedCriterion = new Criterion(criterionNode);
                                if (parsedCriterion.valid)
                                {
                                    parsedItem.criteria.Add(parsedCriterion);
                                }
                            }
                            if (parsedItem.criteria.Count() > 0 || parsedItem.isManual)
                            {
                                parsedChecklist.items.Add(parsedItem);
                            }
                        }
                        availableChecklists.Add(parsedChecklist);
                    }
                }
                return(true);
            }

            catch
            {
                Log.Warning("Error loading checklist. Please, check your cfg file.");
                return(false);
            }
        }
コード例 #3
0
        public void CheckActiveVessel(Vessel ship)
        {
            Log.Info("CheckActiveVessel");
            if (!WernherChecker.checklistSelected)
            {
                return;
            }

            if (MainInstance.checkSelected && MainInstance.partSelection != null)
            {
                partsToCheck = MainInstance.partSelection.selectedParts.Intersect(ship.Parts).ToList();
            }
            else
            {
                partsToCheck = ship.Parts;
            }

            for (int j = 0; j < activeChecklist.items.Count; j++)
            {
                ChecklistItem item = activeChecklist.items[j];
                if (item.isManual)
                {
                    continue;
                }

                item.state = true;
                for (int i = 0; i < item.criteria.Count; i++)
                {
                    Criterion crton = item.criteria[i];
                    switch (crton.type)
                    {
                    case CriterionType.Module:
                        crton.met = CheckForModules(crton);
                        break;

                    case CriterionType.Part:
                        crton.met = CheckForParts(crton);
                        break;

                    case CriterionType.MinResourceLevel:
                        crton.met = CheckForResourceLevel(crton);
                        break;

                    case CriterionType.MinResourceCapacity:
                        crton.met = CheckForResourceCapacity(crton);
                        break;

                    case CriterionType.CrewMember:
                        crton.met = CheckForCrewMember(crton);
                        break;
                    }
                    item.criteria[i] = crton;
                }
                if (!item.allRequired)
                {
                    if (item.criteria.TrueForAll(c => !c.met))
                    {
                        item.state = false;
                    }
                }
                else if (item.criteria.Any(c => !c.met))
                {
                    item.state = false;
                }

                activeChecklist.items[j] = item;
                continue;
            }
        }
コード例 #4
0
        public void CheckVessel(ShipConstruct ship)
        {
            if (HighLogic.LoadedScene != GameScenes.EDITOR)
            {
                return;
            }

            if (MainInstance == null || !WernherChecker.checklistSelected)
            {
                return;
            }

            if (EditorLogic.RootPart == null || (MainInstance.partSelection == null && MainInstance.checkSelected))
            {
                if (ActiveChecklist.items != null)
                {
                    ActiveChecklist.items.ForEach(i => i.state = false);
                }
                return;
            }

            if (MainInstance.checkSelected && MainInstance.partSelection != null && MainInstance.partSelection.selectedParts != null)
            {
                partsToCheck = MainInstance.partSelection.selectedParts.Intersect(ship.Parts).ToList();
            }
            else
            {
                partsToCheck = ship.Parts;
            }

            for (int j = 0; j < activeChecklist.items.Count; j++)
            {
                ChecklistItem item = activeChecklist.items[j];
                if (item.isManual)
                {
                    continue;
                }

                item.state = true;
                for (int i = 0; i < item.criteria.Count; i++)
                {
                    Criterion crton = item.criteria[i];
                    switch (crton.type)
                    {
                    case CriterionType.Module:
                        crton.met = CheckForModules(crton);
                        break;

                    case CriterionType.Part:
                        crton.met = CheckForParts(crton);
                        break;

                    case CriterionType.MinResourceLevel:
                        crton.met = CheckForResourceLevel(crton);
                        break;

                    case CriterionType.MinResourceCapacity:
                        crton.met = CheckForResourceCapacity(crton);
                        break;

                    case CriterionType.CrewMember:
                        crton.met = CheckForCrewMember(crton);
                        break;
                    }
                    item.criteria[i] = crton;
                }
                if (!item.allRequired)
                {
                    if (item.criteria.TrueForAll(c => !c.met))
                    {
                        item.state = false;
                    }
                }
                else if (item.criteria.Any(c => !c.met))
                {
                    item.state = false;
                }

                activeChecklist.items[j] = item;
                continue;
            }
        }
コード例 #5
0
        public bool LoadChecklists()
        {
            try
            {
                if (WernherChecker.Instance.Settings.cfgLoaded)
                {
                    availableChecklists.Clear();
                    foreach (ConfigNode checklistNode in WernherChecker.Instance.Settings.cfg.GetNodes("CHECKLIST"))
                    {
                        Debug.Log("[WernherChecker]: Parsing checklist - " + checklistNode.GetValue("name"));
                        Checklist parsedChecklist = new Checklist();
                        parsedChecklist.items = new List<ChecklistItem>();
                        parsedChecklist.name = checklistNode.GetValue("name");

                        ///Begining item cycle
                        foreach (ConfigNode itemNode in checklistNode.GetNodes("CHECKLIST_ITEM"))
                        {
                            //Debug.Log("parsing item " + itemNode.GetValue("name"));
                            ChecklistItem parsedItem = new ChecklistItem();
                            parsedItem.criteria = new List<Criterion>();
                            parsedItem.name = itemNode.GetValue("name");
                            if (!bool.TryParse(itemNode.GetValue("isManual"), out parsedItem.isManual))
                                parsedItem.isManual = false;
                            if(!bool.TryParse(itemNode.GetValue("allRequired"), out parsedItem.allRequired))
                                parsedItem.allRequired = true; ;

                            //Begining criterion cycle
                            foreach (ConfigNode criterionNode in itemNode.GetNodes("CRITERION"))
                            {
                                //Debug.Log("parsing criterion of type " + criterionNode.GetValue("type"));
                                Criterion parsedCriterion = new Criterion(criterionNode);

                                parsedItem.criteria.Add(parsedCriterion);
                            }
                            parsedChecklist.items.Add(parsedItem);
                        }
                        availableChecklists.Add(parsedChecklist);
                    }
                }
                return true;
            }

            catch
            {
                Debug.LogWarning("[WernherChecker]: Error loading checklist. Please, check your cfg file.");
                return false;
            }
        }
コード例 #6
0
        void OnWindow(int windowID)
        {
            GUILayout.BeginVertical(GUILayout.Width(225));

            if (Settings.cfgLoaded)           //If the cfg file exists
            {
                if (checklistSelected)        //If the checklist is selected
                {
                    if (!selectionInProgress) //If the mode, where the checked parts are set, is active
                    {
                        if (checklistSystem.ActiveChecklist.items.Count > SCROLL_GREATER)
                        {
                            scrollPos = GUILayout.BeginScrollView(scrollPos, false, false, GUILayout.Height(500)); //  , GUILayout.Width((panelWidth + 3)));
                        }
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Current checklist:");
                        GUILayout.FlexibleSpace();
                        GUILayout.Label(checklistSystem.ActiveChecklist.name, labelStyle);
                        GUILayout.EndHorizontal();

                        GUILayout.BeginVertical(boxStyle);
                        for (int i = 0; i < checklistSystem.ActiveChecklist.items.Count; i++)
                        {
                            ChecklistItem tempItem = checklistSystem.ActiveChecklist.items[i];
                            if (tempItem.editorOnly && HighLogic.LoadedScene != GameScenes.EDITOR ||
                                tempItem.flightOnly && HighLogic.LoadedScene != GameScenes.FLIGHT)
                            {
                                continue;
                            }
                            tempItem.DrawItem();
                            checklistSystem.ActiveChecklist.items[i] = tempItem;
                        }
                        if (Settings.jebEnabled == true)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("MOAR BOOSTERS!!!", labelStyle); //small joke :P
                            GUILayout.FlexibleSpace();
                            GUILayout.Toggle(false, "", ChecklistItem.checkboxStyle);
                            GUILayout.EndHorizontal();
                        }
                        GUILayout.EndVertical();
                        if (checklistSystem.ActiveChecklist.items.Count > SCROLL_GREATER)
                        {
                            GUILayout.EndScrollView();
                        }

                        if (GUILayout.Button("Change checklist", buttonStyle, GUILayout.Height(24f)))
                        {
                            mainWindow.height = 0f;
                            checklistSelected = false;
                        }

                        //-------------------------------------------------------------------------------------------
                        //

                        if (HighLogic.LoadedScene == GameScenes.FLIGHT)
                        {
                            checkSelected = false;
                            checklistSystem.CheckVessel();
                        }

                        if (showAdvanced && HighLogic.LoadedScene == GameScenes.EDITOR) //Advanced options showed
                        {
                            if (GUILayout.Button(new GUIContent("Recheck vessel", "Use this if the automatic checking doesn't work for some reason"), buttonStyle, GUILayout.Height(24f)))
                            {
                                checklistSystem.CheckVessel();
                            }


                            {
                                GUILayout.Label("Checked area:", labelStyle);
                                if (GUILayout.Toggle(!checkSelected, new GUIContent("Entire ship", "Check the entire ship"), toggleStyle) != !checkSelected)
                                {
                                    checkSelected = false;
                                    checklistSystem.CheckVessel();
                                    mainWindow.height = 0f;
                                }
                                if (GUILayout.Toggle(checkSelected, new GUIContent(partSelection == null || EditorLogic.RootPart == null ? "Selected parts (0)" : "Selected parts (" + partSelection.selectedParts.Intersect(EditorLogic.fetch.ship.parts).ToList().Count + ")", "Check only a selected section of the ship (e.g. lander/booster stage)"), toggleStyle) == !checkSelected)
                                {
                                    checkSelected = true;
                                    checklistSystem.CheckVessel();
                                }
                            }
                            if (checkSelected && EditorLogic.RootPart != null)
                            {
                                if (GUILayout.Button(new GUIContent("Select parts", "Select the checked parts"), buttonStyle, GUILayout.Height(24f)))
                                {
                                    mainWindow.height = 0f;
                                    print("[WernherChecker]: Engaging selection mode");
                                    foreach (Part part in VesselParts)
                                    {
                                        part.SetHighlightDefault();
                                    }
                                    partSelection       = new PartSelection();
                                    selectionInProgress = true;
                                    selectedShowed      = false;
                                    if (HighLogic.LoadedScene == GameScenes.EDITOR)
                                    {
                                        InputLockManager.SetControlLock(ControlTypes.EDITOR_PAD_PICK_PLACE | ControlTypes.EDITOR_UI, "WernherChecker_partSelection");
                                    }
                                }

                                if (!selectedShowed)
                                {
                                    if (GUILayout.Button(new GUIContent("Highlight selected parts", "Highlight the parts selected for checking"), buttonStyle, GUILayout.Height(24f)))
                                    {
                                        if (partSelection != null)
                                        {
                                            foreach (Part part in partSelection.selectedParts)
                                            {
                                                if (WernherChecker.VesselParts.Contains(part))
                                                {
                                                    part.SetHighlightType(Part.HighlightType.AlwaysOn);
                                                    part.SetHighlightColor(new Color(10f, 0.9f, 0f));
                                                }
                                            }
                                        }
                                        selectedShowed = true;
                                    }
                                }
                                else
                                {
                                    if (GUILayout.Button("Hide selected parts", buttonStyle, GUILayout.Height(24f)))
                                    {
                                        /*float max, min;
                                         * GUI.skin.label.CalcMinMaxWidth(new GUIContent("Thisisthecontentasdsdfsdfsd"), out min, out max);
                                         * Log.Info("Min: " + min + ", Max: " + max);*/
                                        foreach (Part part in WernherChecker.VesselParts)
                                        {
                                            part.SetHighlightDefault();
                                        }
                                        selectedShowed = false;
                                    }
                                }
                            }
                        }
                        if (HighLogic.LoadedScene == GameScenes.EDITOR)
                        {
                            if (GUILayout.Button(new GUIContent(showAdvanced ? "︽ Fewer Options ︽" : "︾ More Options ︾", "Show/Hide advanced options"), buttonStyle, GUILayout.Height(24f)))
                            {
                                mainWindow.height = 0f;
                                showAdvanced      = !showAdvanced;
                            }
                        }
                    }
                    else
                    {
                        GUILayout.Label("Select parts to check by holding LMB and moving mouse", labelStyle);
                        GUILayout.Label("Current selection: " + partSelection.selectedParts.Count + " part(s)");
                        if (GUILayout.Button(new GUIContent("Done", "Finish part selection"), buttonStyle))
                        {
                            mainWindow.height = 0f;
                            print("[WernherChecker]: " + partSelection.selectedParts.Count + " parts selected");
                            foreach (Part part in WernherChecker.VesselParts)
                            {
                                part.SetHighlightDefault();
                            }
                            selectionInProgress = false;
                            if (HighLogic.LoadedScene == GameScenes.EDITOR)
                            {
                                InputLockManager.RemoveControlLock("WernherChecker_partSelection");
                            }
                            checklistSystem.CheckVessel();
                        }
                    }
                }
                else
                {
                    GUILayout.Label("Please select checklist", labelStyle);
                    SelectChecklist();
                }
            }

            else
            {
                GUILayout.Label("Cannot find config file!", labelStyle);
            }

            GUILayout.EndVertical();
            GUI.DragWindow(); //making it dragable
            SetTooltipText();
        }