private static ConfigNode CreateAeroStressConfigNode(FARPartStressTemplate template) { var node = new ConfigNode("FARPartStressTemplate"); node.AddValue("name", template.name); node.AddValue("YmaxStress", template.YmaxStress); node.AddValue("XZmaxStress", template.XZmaxStress); node.AddValue("requiresCrew", template.crewed.ToString()); node.AddValue("isSpecialTemplate", template.isSpecialTemplate.ToString()); var res = new ConfigNode("Resources"); res.AddValue("numReq", template.minNumResources); res.AddValue("rejectUnlistedResources", template.rejectUnlistedResources); //Make sure to update this whenever MM fixes how it goes through nodes and values foreach (string s in template.resources) { res.AddValue("res", s); } foreach (string s in template.excludeResources) { res.AddValue("excludeRes", s); } res.AddValue("flowMode", template.flowModeNeeded ? FARDebugAndSettings.FlowMode_str[(int)template.flowMode] : "unneeded"); node.AddNode(res); return(node); }
private static ConfigNode CreateAeroStressConfigNode(FARPartStressTemplate template, int index) { ConfigNode node = new ConfigNode("FARPartStressTemplate"); node.AddValue("name", template.name); node.AddValue("YmaxStress", template.YmaxStress); node.AddValue("XZmaxStress", template.XZmaxStress); node.AddValue("requiresCrew", template.crewed.ToString()); node.AddValue("isSpecialTemplate", template.isSpecialTemplate.ToString()); ConfigNode res = new ConfigNode("Resources"); res.AddValue("numReq", template.minNumResources); res.AddValue("rejectUnlistedResources", template.rejectUnlistedResources); //Make sure to update this whenever MM fixes how it goes through nodes and values int i = template.resources.Count - 1; foreach (string s in template.resources) { res.AddValue("res", s); i--; } i = template.excludeResources.Count - 1; foreach (string s in template.excludeResources) { res.AddValue("excludeRes", s); i++; } if (template.flowModeNeeded) res.AddValue("flowMode", FARDebugAndSettings.FlowMode_str[(int)template.flowMode]); else res.AddValue("flowMode", "unneeded"); node.AddNode(res); return node; }
public static FARPartStressTemplate DetermineStressTemplate(Part p) { FARPartStressTemplate template = StressTemplates[0]; int resCount = p.Resources.Count; bool crewed = p.CrewCapacity > 0; if (p.Modules.Contains <ModuleAblator>() || p.Resources.Contains("Ablator")) { return(template); } foreach (FARPartStressTemplate candidate in StressTemplates) { if (candidate.isSpecialTemplate) { continue; } if (candidate.crewed != crewed) { continue; } if (resCount < candidate.minNumResources) { continue; } if (candidate.rejectUnlistedResources) { bool cont = true; int numRes = 0; foreach (PartResource res in p.Resources) { if (candidate.resources.Contains(res.info.name)) { numRes++; cont = false; } else { cont = true; break; } } if (cont || numRes < candidate.minNumResources) { continue; } } else { int numRes = 0; foreach (PartResource res in p.Resources) { if (!candidate.excludeResources.Contains(res.info.name)) { if (!candidate.flowModeNeeded || res.info.resourceFlowMode == candidate.flowMode) { numRes++; } } } if (numRes < candidate.minNumResources) { continue; } } template = candidate; } return(template); }
private static FARPartStressTemplate CreateFARPartStressTemplate(ConfigNode template) { var parsedTemplate = new FARPartStressTemplate { XZmaxStress = 500, YmaxStress = 500, name = "default", isSpecialTemplate = false, minNumResources = 0, resources = new List <string>(), excludeResources = new List <string>(), rejectUnlistedResources = false, crewed = false, flowModeNeeded = false, flowMode = ResourceFlowMode.NO_FLOW }; if (template.HasValue("name")) { parsedTemplate.name = template.GetValue("name"); } if (template.HasValue("isSpecialTemplate")) { bool.TryParse(template.GetValue("isSpecialTemplate"), out parsedTemplate.isSpecialTemplate); } if (template.HasValue("YmaxStress")) { double.TryParse(template.GetValue("YmaxStress"), out parsedTemplate.YmaxStress); } if (template.HasValue("XZmaxStress")) { double.TryParse(template.GetValue("XZmaxStress"), out parsedTemplate.XZmaxStress); } if (template.HasValue("requiresCrew")) { bool.TryParse(template.GetValue("requiresCrew"), out parsedTemplate.crewed); } if (!template.HasNode("Resources")) { return(parsedTemplate); } ConfigNode resources = template.GetNode("Resources"); if (resources.HasValue("numReq")) { int.TryParse(resources.GetValue("numReq"), out parsedTemplate.minNumResources); } if (resources.HasValue("rejectUnlistedResources")) { bool.TryParse(resources.GetValue("rejectUnlistedResources"), out parsedTemplate.rejectUnlistedResources); } if (resources.HasValue("flowMode")) { parsedTemplate.flowModeNeeded = true; string flowString = resources.GetValue("flowMode").ToLowerInvariant(); switch (flowString) { case "all_vessel": parsedTemplate.flowMode = ResourceFlowMode.ALL_VESSEL; break; case "stack_priority_search": parsedTemplate.flowMode = ResourceFlowMode.STACK_PRIORITY_SEARCH; break; case "stage_priority_flow": parsedTemplate.flowMode = ResourceFlowMode.STAGE_PRIORITY_FLOW; break; case "no_flow": parsedTemplate.flowMode = ResourceFlowMode.NO_FLOW; break; default: parsedTemplate.flowModeNeeded = false; break; } } PartResourceLibrary l = PartResourceLibrary.Instance; foreach (string resString in resources.GetValues("res")) { if (l.resourceDefinitions.Contains(resString)) { parsedTemplate.resources.Add(resString); } } foreach (string resString in resources.GetValues("excludeRes")) { if (l.resourceDefinitions.Contains(resString)) { parsedTemplate.excludeResources.Add(resString); } } return(parsedTemplate); }
private static FARPartStressTemplate CreateFARPartStressTemplate(ConfigNode template) { FARPartStressTemplate parsedTemplate = new FARPartStressTemplate(); parsedTemplate.XZmaxStress = 500; parsedTemplate.YmaxStress = 500; parsedTemplate.name = "default"; parsedTemplate.isSpecialTemplate = false; parsedTemplate.minNumResources = 0; parsedTemplate.resources = new List<string>(); parsedTemplate.excludeResources = new List<string>(); parsedTemplate.rejectUnlistedResources = false; parsedTemplate.crewed = false; parsedTemplate.flowModeNeeded = false; parsedTemplate.flowMode = ResourceFlowMode.NO_FLOW; if (template.HasValue("name")) parsedTemplate.name = template.GetValue("name"); if (template.HasValue("isSpecialTemplate")) bool.TryParse(template.GetValue("isSpecialTemplate"), out parsedTemplate.isSpecialTemplate); if (template.HasValue("YmaxStress")) double.TryParse(template.GetValue("YmaxStress"), out parsedTemplate.YmaxStress); if (template.HasValue("XZmaxStress")) double.TryParse(template.GetValue("XZmaxStress"), out parsedTemplate.XZmaxStress); if (template.HasValue("requiresCrew")) bool.TryParse(template.GetValue("requiresCrew"), out parsedTemplate.crewed); if (template.HasNode("Resources")) { ConfigNode resources = template.GetNode("Resources"); if(resources.HasValue("numReq")) int.TryParse(resources.GetValue("numReq"), out parsedTemplate.minNumResources); if (resources.HasValue("rejectUnlistedResources")) bool.TryParse(resources.GetValue("rejectUnlistedResources"), out parsedTemplate.rejectUnlistedResources); if (resources.HasValue("flowMode")) { parsedTemplate.flowModeNeeded = true; string flowString = resources.GetValue("flowMode").ToLowerInvariant(); if (flowString == "all_vessel") parsedTemplate.flowMode = ResourceFlowMode.ALL_VESSEL; else if (flowString == "stack_priority_search") parsedTemplate.flowMode = ResourceFlowMode.STACK_PRIORITY_SEARCH; else if (flowString == "stage_priority_flow") parsedTemplate.flowMode = ResourceFlowMode.STAGE_PRIORITY_FLOW; else if (flowString == "no_flow") parsedTemplate.flowMode = ResourceFlowMode.NO_FLOW; else parsedTemplate.flowModeNeeded = false; } PartResourceLibrary l = PartResourceLibrary.Instance; foreach (string resString in resources.GetValues("res")) { if (l.resourceDefinitions.Contains(resString)) parsedTemplate.resources.Add(resString); } foreach (string resString in resources.GetValues("excludeRes")) { if (l.resourceDefinitions.Contains(resString)) parsedTemplate.excludeResources.Add(resString); } } return parsedTemplate; }
private void AeroStressTab(GUIStyle buttonStyle, GUIStyle boxStyle) { int i = 0; int removeIndex = -1; GUILayout.BeginHorizontal(); GUILayout.BeginVertical(boxStyle); for (i = 0; i < FARAeroStress.StressTemplates.Count; i++) { GUILayout.BeginHorizontal(); bool active = GUILayout.Toggle(i == aeroStressIndex, FARAeroStress.StressTemplates[i].name, buttonStyle, GUILayout.Width(150)); if (GUILayout.Button("-", buttonStyle, GUILayout.Width(30), GUILayout.Height(30))) { removeIndex = i; } GUILayout.EndHorizontal(); if (active) { aeroStressIndex = i; } } if (removeIndex >= 0) { FARAeroStress.StressTemplates.RemoveAt(removeIndex); if (aeroStressIndex == removeIndex && removeIndex > 0) { aeroStressIndex--; } removeIndex = -1; } if (GUILayout.Button("+", buttonStyle, GUILayout.Width(30), GUILayout.Height(30))) { FARPartStressTemplate newTemplate = new FARPartStressTemplate(); newTemplate.XZmaxStress = 500; newTemplate.YmaxStress = 500; newTemplate.name = "default"; newTemplate.isSpecialTemplate = false; newTemplate.minNumResources = 0; newTemplate.resources = new List <string>(); newTemplate.excludeResources = new List <string>(); newTemplate.rejectUnlistedResources = false; newTemplate.crewed = false; newTemplate.flowModeNeeded = false; newTemplate.flowMode = ResourceFlowMode.NO_FLOW; FARAeroStress.StressTemplates.Add(newTemplate); } GUILayout.EndVertical(); GUILayout.BeginVertical(boxStyle); FARPartStressTemplate activeTemplate = FARAeroStress.StressTemplates[aeroStressIndex]; string tmp; GUIUtils.TextEntryField("Name:", 80, ref activeTemplate.name); activeTemplate.YmaxStress = GUIUtils.TextEntryForDouble("Axial (Y-axis) Max Stress:", 240, activeTemplate.YmaxStress); activeTemplate.XZmaxStress = GUIUtils.TextEntryForDouble("Lateral (X,Z-axis) Max Stress:", 240, activeTemplate.XZmaxStress); activeTemplate.crewed = GUILayout.Toggle(activeTemplate.crewed, "Requires Crew Compartment"); tmp = activeTemplate.minNumResources.ToString(); GUIUtils.TextEntryField("Min Num Resources:", 80, ref tmp); tmp = Regex.Replace(tmp, @"[^\d]", ""); activeTemplate.minNumResources = Convert.ToInt32(tmp); GUILayout.Label("Req Resources:"); StringListUpdateGUI(activeTemplate.resources, buttonStyle, boxStyle); GUILayout.Label("Exclude Resources:"); StringListUpdateGUI(activeTemplate.excludeResources, buttonStyle, boxStyle); activeTemplate.rejectUnlistedResources = GUILayout.Toggle(activeTemplate.rejectUnlistedResources, "Reject Unlisted Res"); activeTemplate.flowModeNeeded = GUILayout.Toggle(activeTemplate.flowModeNeeded, "Requires Specific Flow Mode"); if (activeTemplate.flowModeNeeded) { activeTemplate.flowMode = (ResourceFlowMode)GUILayout.SelectionGrid((int)activeTemplate.flowMode, FlowMode_str, 1); } activeTemplate.isSpecialTemplate = GUILayout.Toggle(activeTemplate.isSpecialTemplate, "Special Hardcoded Usage"); FARAeroStress.StressTemplates[aeroStressIndex] = activeTemplate; GUILayout.EndVertical(); GUILayout.EndHorizontal(); }