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(); }
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); } }
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; } }
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; } }
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; } }
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(); }