/// <summary> /// check the part cost against a string list /// </summary> public static bool CheckCost(AvailablePart part, string[] value, ConfigNodes.CheckNodes.CompareType equality = ConfigNodes.CheckNodes.CompareType.Equals) { if (equality == ConfigNodes.CheckNodes.CompareType.Equals) { return(value.Contains(part.cost.ToString(), StringComparer.OrdinalIgnoreCase)); } else { if (value.Length > 1) { Logger.Log($"Cost comparisons against multiple values when not using Equals only use the first value. Value list is: {string.Join(", ", value)}", Logger.LogLevel.Warn); } if (double.TryParse(value[0], out double d)) { if (equality == ConfigNodes.CheckNodes.CompareType.GreaterThan && part.cost > d) { return(true); } else if (equality == ConfigNodes.CheckNodes.CompareType.LessThan && part.cost < d) { return(true); } } } return(false); }
/// <summary> /// check the ISP of the engine /// </summary> public static bool CheckISP(AvailablePart part, string[] value, ConfigNodes.CheckNodes.CompareType equality = ConfigNodes.CheckNodes.CompareType.Equals, bool vacuum = false) { if (!IsEngine(part)) { return(false); } if (part.partPrefab == null) { return(false); } foreach (var engine in part.partPrefab.Modules.OfType <ModuleEngines>()) { float atm = engine.atmosphereCurve.Evaluate(1); float vac = engine.atmosphereCurve.Evaluate(0); float isp; if (vacuum) { isp = vac; } else { isp = atm; } if (equality == ConfigNodes.CheckNodes.CompareType.Equals) { return(value.Contains(isp.ToString(), StringComparer.OrdinalIgnoreCase)); } else { if (value.Length > 1) { Logger.Log($"ISP comparisons against multiple values when not using Equals only use the first value. Value list is: {string.Join(", ", value)}", Logger.LogLevel.Warn); } if (double.TryParse(value[0], out double d)) { if (equality == ConfigNodes.CheckNodes.CompareType.GreaterThan && isp > d) { return(true); } else if (equality == ConfigNodes.CheckNodes.CompareType.LessThan && isp < d) { return(true); } } } } return(false); }
public static bool NodeCheck(AvailablePart part, string[] parameters, ConfigNodes.CheckNodes.CompareType equality = ConfigNodes.CheckNodes.CompareType.Equals) { if (parameters.Length < 3 || !LoadAndProcess.Loaded_Modules.TryGetValue(parameters[0], out Type baseType)) { return(false); } foreach (PartModule pm in part.partPrefab.Modules) { if (!string.IsNullOrEmpty(pm.moduleName) && baseType.IsAssignableFrom(LoadAndProcess.Loaded_Modules[pm.moduleName])) { BaseField f = pm.Fields[parameters[1]]; if (f == null) { return(false); } if (f.originalValue == null) { return(parameters[2].Equals("null", StringComparison.OrdinalIgnoreCase)); } else if (!double.TryParse(parameters[2], out double res) || !double.TryParse(f.originalValue.ToString(), out double org)) { return(string.Equals(parameters[2], f.originalValue.ToString(), StringComparison.OrdinalIgnoreCase)); } else { if (equality == ConfigNodes.CheckNodes.CompareType.Equals) { return(org == res); } else if (equality == ConfigNodes.CheckNodes.CompareType.GreaterThan) { return(org > res); } else if (equality == ConfigNodes.CheckNodes.CompareType.LessThan) { return(org < res); } } } } return(false); }
/// <summary> /// check the thrust of the engine /// </summary> public static bool CheckThrust(AvailablePart part, string[] value, ConfigNodes.CheckNodes.CompareType equality = ConfigNodes.CheckNodes.CompareType.Equals) { if (!IsEngine(part)) { return(false); } if (part.partPrefab == null) { return(false); } foreach (var engine in part.partPrefab.Modules.OfType <ModuleEngines>()) { if (equality == ConfigNodes.CheckNodes.CompareType.Equals) { return(value.Contains(engine.maxThrust.ToString(), StringComparer.OrdinalIgnoreCase)); } else { if (value.Length > 1) { Logger.Log($"Thrust comparisons against multiple values when not using Equals only use the first value. Value list is: {string.Join(", ", value)}", Logger.LogLevel.Warn); } if (double.TryParse(value[0], out double d)) { if (equality == ConfigNodes.CheckNodes.CompareType.GreaterThan && engine.maxThrust > d) { return(true); } else if (equality == ConfigNodes.CheckNodes.CompareType.LessThan && engine.maxThrust < d) { return(true); } } } } return(false); }
/// <summary> /// checks against the attach node sizes on the part /// </summary> public static bool CheckPartSize(AvailablePart part, string[] values, bool contains = true, ConfigNodes.CheckNodes.CompareType equality = ConfigNodes.CheckNodes.CompareType.Equals, bool exact = false) { if (part.partPrefab.attachNodes == null) { return(false); } if (equality == ConfigNodes.CheckNodes.CompareType.Equals) { return(Contains(values, part.partPrefab.attachNodes, n => n.size.ToString(), contains, exact)); } else // only compare against the first value here { if (values.Length > 1 && equality != ConfigNodes.CheckNodes.CompareType.Between) { Logger.Log($"Size comparisons against multiple values when not using Equals only use the first value. Value list is: {string.Join(", ", values)}", Logger.LogLevel.Warn); } if (int.TryParse(values[0], out int i)) { if (equality == ConfigNodes.CheckNodes.CompareType.GreaterThan) { part.partPrefab.attachNodes.Any(n => n.size > i); return(true); } else if (equality == ConfigNodes.CheckNodes.CompareType.LessThan) { part.partPrefab.attachNodes.Any(n => n.size < i); return(true); } } } return(false); }