Пример #1
0
        //Overlay a .CFG on a given object.
        public static void LoadConfiguration(System.Object obj, ConfigNode node)
        {
            var t = obj.GetType();

            var config = ConfigToDict(node);

            foreach (var key in config.Keys)
            {
                var field = t.GetField(key);
                //print(field);
                if (field != null)
                {
                    //print(field.FieldType.ToString().ToLower() +" Was "+field.GetValue(obj));
                    switch (field.FieldType.ToString().ToLower())
                    {
                    case "system.string":
                        field.SetValue(obj, config[key]);
                        break;

                    case "system.single":
                        field.SetValue(obj, float.Parse(config[key]));
                        break;

                    case "system.double":
                        field.SetValue(obj, double.Parse(config[key]));
                        break;

                    case "system.int32":
                        field.SetValue(obj, int.Parse(config[key]));
                        break;

                    case "system.uint32":
                        field.SetValue(obj, uint.Parse(config[key]));
                        break;

                    case "system.boolean":
                        field.SetValue(obj, bool.Parse(config[key]));
                        break;

                    case "unityengine.color":
                        field.SetValue(obj, ConfigNode.ParseColor(config[key]));
                        break;

                    case "unityengine.vector3":
                        field.SetValue(obj, ConfigNode.ParseVector3(config[key]));
                        break;

                    case "unityengine.animationcurve":
                        field.SetValue(obj, ParseCurve(node.GetNode(key)));
                        break;

                    case "unityengine.gradient":
                        field.SetValue(obj, new Gradient());
                        break;

                    case "orbit":
                        field.SetValue(obj, ParseOrbit(node.GetNode(key)));
                        break;

                    case "pqsmod_pfheightcolor+landclass[]":
                        int i   = 0;
                        var lcs = new List <PQSMod_PFHeightColor.LandClass>();
                        //print("parse landclass");
                        var pn = node.GetNode(key);
                        while (true)
                        {
                            var n = pn.GetNode("LandClass", i);
                            if (n != null)
                            {
                                var nlc = new PQSMod_PFHeightColor.LandClass();
                                LoadConfiguration(nlc, n);
                                lcs.Add(nlc);
                            }
                            else
                            {
                                break;
                            }
                            i++;
                        }
                        field.SetValue(obj, lcs.ToArray());
                        break;

                    case "mapso":
                        //print("Loading map:"+config[key]);
                        if (config[key].ToLower() == "null")
                        {
                            field.SetValue(obj, null);
                        }
                        else
                        {
                            var colorTexture = PFUtil.LoadTexture(DataPath + config[key]);
                            var mapso        = (MapSO)ScriptableObject.CreateInstance(typeof(MapSO));
                            mapso.CreateMap(MapSO.MapDepth.RGBA, colorTexture);
                            field.SetValue(obj, mapso);
                        }
                        break;
                    }
                }
            }
        }
        //Overlay a .CFG on a given object.
        public static void LoadConfiguration(System.Object obj, ConfigNode node)
        {
            var t = obj.GetType();
 
            var config = ConfigToDict(node);
            foreach (var key in config.Keys)
            {
                var field = t.GetField(key);
                //print(field);
                if(field!=null)
                {
                    //print(field.FieldType.ToString().ToLower() +" Was "+field.GetValue(obj));
                    switch(field.FieldType.ToString().ToLower())
                    {
                        case "system.string":
                            field.SetValue(obj,config[key]);
                            break;
                        case "system.single":
                            field.SetValue(obj,float.Parse(config[key]));
                            break;
                        case "system.double":
                            field.SetValue(obj, double.Parse(config[key]));
                            break;
                        case "system.int32":
                            field.SetValue(obj, int.Parse(config[key]));
                            break;
                        case "system.uint32":
                            field.SetValue(obj, uint.Parse(config[key]));
                            break;
                        case "system.boolean":
                            field.SetValue(obj, bool.Parse(config[key]));
                            break;
                        case "unityengine.color":
                            field.SetValue(obj, ConfigNode.ParseColor(config[key]));
                            break;
                        case "unityengine.vector3":
                            field.SetValue(obj, ConfigNode.ParseVector3(config[key]));
                            break;
                        case "unityengine.animationcurve":
                            field.SetValue(obj, ParseCurve(node.GetNode(key)));
                            break;
                        case "unityengine.gradient":
                            field.SetValue(obj, new Gradient());
                            break;
                        case "orbit":
                            field.SetValue(obj, ParseOrbit(node.GetNode(key)));
                            break;
                        case "pqsmod_pfheightcolor+landclass[]":
                            int i = 0;
                            var lcs = new List<PQSMod_PFHeightColor.LandClass>();
                            //print("parse landclass");
                            var pn = node.GetNode(key);
                            while (true)
                            {
                                var n = pn.GetNode("LandClass", i);
                                if (n != null)
                                {
                                    var nlc = new PQSMod_PFHeightColor.LandClass();
                                    LoadConfiguration(nlc,n);
                                    lcs.Add(nlc);
                                }
                                else
                                {
                                    break;
                                }
                                i++;
                            }
                            field.SetValue(obj, lcs.ToArray());
                            break;
                            
                        case "mapso":
                            //print("Loading map:"+config[key]);
                            if (config[key].ToLower() == "null")
                                field.SetValue(obj, null);
                            else
                            {
                                var colorTexture = PFUtil.LoadTexture(DataPath + config[key]);
                                var mapso = (MapSO) ScriptableObject.CreateInstance(typeof (MapSO));
                                mapso.CreateMap(MapSO.MapDepth.RGBA, colorTexture);
                                field.SetValue(obj, mapso);
                            }
                            break;


                    }
                   
                }
            }

        }