Ejemplo n.º 1
0
        static Constants()
        {
            var settingsPath = Tools.GetModRootDirectory() + Path.DirectorySeparatorChar + "About" + Path.DirectorySeparatorChar + "Settings.txt";

            File.ReadAllLines(settingsPath)
            .Select(line => line.Trim())
            .Where(line => line.StartsWith("/", StringComparison.Ordinal) == false && line.Length > 0)
            .Select(line =>
            {
                var parts = line.Split('=').Select(part => part.Trim()).ToList();
                parts.Insert(0, line);
                return(parts.ToArray());
            })
            .Do(parts =>
            {
                if (parts.Length != 3)
                {
                    Log.Error("Unexpected line: " + parts[0]);
                }
                else
                {
                    var field    = parts[1];
                    var value    = parts[2];
                    var constant = AccessTools.Field(typeof(Constants), field);
                    if (constant != null)
                    {
                        switch (constant.FieldType.Name)
                        {
                        case "Boolean":
                            {
                                bool result;
                                if (bool.TryParse(value, out result))
                                {
                                    constant.SetValue(null, result);
                                }
                                else
                                {
                                    Log.Error("Cannot parse boolean '" + value + "' of constant " + field);
                                }
                                break;
                            }

                        case "Int32":
                            {
                                int result;
                                if (int.TryParse(value, out result))
                                {
                                    constant.SetValue(null, result);
                                }
                                else
                                {
                                    Log.Error("Cannot parse int '" + value + "' of constant " + field);
                                }
                                break;
                            }

                        case "Single":
                            {
                                float result;
                                if (float.TryParse(value, out result))
                                {
                                    constant.SetValue(null, result);
                                }
                                else
                                {
                                    Log.Error("Cannot parse float '" + value + "' of constant " + field);
                                }
                                break;
                            }

                        default:
                            Log.Error("Zombieland constant '" + field + "' with unknown type " + constant.FieldType.Name);
                            break;
                        }
                    }
                    else
                    {
                        Log.Error("Zombieland constant '" + field + "' unknown");
                    }
                }
            });
        }