private static void BuildType(Type t, StringBuilder sb) { object[] classSpace = t.GetCustomAttributes(typeof(LuaNameSpaceAttribute), false); if (classSpace.Length == 0) { return; } LuaNameSpaceAttribute att = classSpace[0] as LuaNameSpaceAttribute; if (att == null) { return; } string fullname = t.FullName; string simpleName = string.IsNullOrEmpty(att.keyName) ? t.Name : att.keyName; sb.AppendLine("t={}"); sb.AppendFormat("this[\"{0}\"]=t\r\n", simpleName); sb.AppendFormat("t.class={0}\r\n", fullname); ConstructorInfo[] cs = t.GetConstructors(BindingFlags.Public | BindingFlags.Instance); if (cs.Length > 0) { sb.AppendFormat("t.new=function(...) return this[\"{0}\"].class(...) end\r\n", simpleName); } }
private static void BuildMember(Type t, StringBuilder sb) { if (!t.IsClass) { return; } object[] classSpace = t.GetCustomAttributes(typeof(LuaNameSpaceAttribute), false); if (classSpace.Length == 0) { return; } LuaNameSpaceAttribute classAtt = classSpace[0] as LuaNameSpaceAttribute; if (classAtt == null) { return; } BindingFlags flag = BindingFlags.Static | BindingFlags.Public; MemberInfo[] methods = t.GetMembers(flag); foreach (MemberInfo m in methods) { object[] atts = m.GetCustomAttributes(typeof(LuaNameSpaceAttribute), false); if (atts.Length == 0) { continue; } LuaNameSpaceAttribute att = atts[0] as LuaNameSpaceAttribute; if (att == null) { return; } string simpleName = string.IsNullOrEmpty(att.keyName) ? m.Name : att.keyName; if (m is FieldInfo) { FieldInfo f = (FieldInfo)m; if (f.FieldType == typeof(string)) { sb.AppendFormat("t.{0}=\"{1}\"\r\n", simpleName, f.GetValue(null)); continue; } if (f.FieldType.IsValueType) { sb.AppendFormat("t.{0}={1}\r\n", simpleName, f.GetValue(null)); continue; } } sb.AppendFormat("t.{0}=t.class.{0}\r\n", simpleName); } }
private static void BuildEnum(Type t, StringBuilder sb) { if (!t.IsEnum) { return; } string[] enums = Enum.GetNames(t); object[] classSpace = t.GetCustomAttributes(typeof(LuaNameSpaceAttribute), false); if (classSpace.Length == 0) { return; } LuaNameSpaceAttribute classAtt = classSpace[0] as LuaNameSpaceAttribute; if (classAtt == null) { return; } foreach (var m in enums) { string up = EditGUITools.GetUpperCase(m, true); sb.AppendFormat("t.{0}=t.class.{1}\r\n", up, m); } }