//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; } } } }