public override void Initialization() { base.Initialization(); if (part.Modules.GetModule <ModuleControlSurface>()) { part.RemoveModule(part.Modules.GetModule <ModuleControlSurface>()); } OnVesselPartsChange += CalculateSurfaceFunctions; UpdateEvents(); prevIsFlap = isFlap; prevIsSpoiler = isSpoiler; if (!isFlap) { flapDeflectionLevel = 0; } justStarted = true; if (vessel) { lastReferenceTransform = vessel.ReferenceTransform; } if (!FARDebugValues.allowStructuralFailures) { return; } foreach (FARPartStressTemplate temp in FARAeroStress.StressTemplates) { if (temp.Name == "ctrlSurfStress") { FARPartStressTemplate template = temp; double maxForceMult = Math.Pow(massMultiplier, FARAeroUtil.massStressPower); YmaxForce *= 1 - ctrlSurfFrac; XZmaxForce *= 1 - ctrlSurfFrac; double tmp = template.YMaxStress; //in MPa tmp *= S * ctrlSurfFrac * maxForceMult; YmaxForce += tmp; tmp = template.XZMaxStress; //in MPa tmp *= S * ctrlSurfFrac * maxForceMult; XZmaxForce += tmp; break; } } }
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", FARDebugOptions.FlowMode_str[(int)template.flowMode]); } else { res.AddValue("flowMode", "unneeded"); } node.AddNode(res); return(node); }
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) 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; TextEntryField("Name:", 80, ref activeTemplate.name); tmp = activeTemplate.YmaxStress.ToString(); TextEntryField("Axial (Y-axis) Max Stress:", 240, ref tmp); tmp = Regex.Replace(tmp, @"[^-?\d*\.?\d*]", ""); activeTemplate.YmaxStress = Convert.ToDouble(tmp); tmp = activeTemplate.XZmaxStress.ToString(); TextEntryField("Lateral (X,Z-axis) Max Stress:", 240, ref tmp); tmp = Regex.Replace(tmp, @"[^-?\d*\.?\d*]", ""); activeTemplate.XZmaxStress = Convert.ToDouble(tmp); activeTemplate.crewed = GUILayout.Toggle(activeTemplate.crewed, "Requires Crew Compartment"); tmp = activeTemplate.minNumResources.ToString(); TextEntryField("Min Num Resources:", 80, ref tmp); tmp = Regex.Replace(tmp, @"[^-?\d*\.?\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(); }
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) { 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; FARGUIUtils.TextEntryField("Name:", 80, ref activeTemplate.name); activeTemplate.YmaxStress = FARGUIUtils.TextEntryForDouble("Axial (Y-axis) Max Stress:", 240, activeTemplate.YmaxStress); activeTemplate.XZmaxStress = FARGUIUtils.TextEntryForDouble("Lateral (X,Z-axis) Max Stress:", 240, activeTemplate.XZmaxStress); activeTemplate.crewed = GUILayout.Toggle(activeTemplate.crewed, "Requires Crew Compartment"); tmp = activeTemplate.minNumResources.ToString(); FARGUIUtils.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(); }
public static FARPartStressTemplate DetermineStressTemplate(Part p) { FARPartStressTemplate template = StressTemplates[0]; int resCount = p.Resources.Count; bool crewed = p.CrewCapacity > 0; 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.list) { 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.list) { 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) { 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 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 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", FARDebugOptions.FlowMode_str[(int)template.flowMode]); else res.AddValue("flowMode", "unneeded"); node.AddNode(res); return node; }