示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
 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);
 }
示例#4
0
 /// <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);
 }
示例#5
0
        /// <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);
        }