private static LuaClassDict BuildClasses(LuaTable table, string name) { var luaClasses = new LuaClassDict(); luaClasses.Add(new LuaClass(table, name)); BuildClasses(luaClasses, table); return(luaClasses); }
private static void BuildClasses(LuaClassDict luaClasses, Dictionary <string, object> luaFields) { foreach (var(name, value) in luaFields) { if (value is LuaTable table) { if (table.IsArray()) { var list = table.ToList(); if (list.Count != 0 && list.HasDefinedType(out var listType) && listType == typeof(LuaTable)) { // We will make the big-brain assumption that all the tables here belong to the same class var allFieldsInListClass = new Dictionary <string, object>(); list .Cast <LuaTable>() .SelectMany(t => t.ToDictionary()) .ToList() .ForEach(kvp => allFieldsInListClass[kvp.Key] = kvp.Value); luaClasses.Add(new LuaClass(allFieldsInListClass, name.ToCSharpName())); BuildClasses(luaClasses, allFieldsInListClass); foreach (var luaTable in list.Cast <LuaTable>().ToList()) { BuildClasses(luaClasses, luaTable); } } } else { luaClasses.Add(new LuaClass(table, name.ToCSharpName())); BuildClasses(luaClasses, table); } } } }