//no param
        private void RegisterNMethod(int indent, StringBuilder sb)
        {
            string indentStr = CSToLuaRegisterHelper.GetIndent(indent);

            if (methodInfo.ReturnType == typeof(void))
            {
                if (methodInfo.IsStatic)
                {
                    sb.AppendLine(string.Format("{0}{1}.{2}();", indentStr, classRegister.RegisterType, methodInfo.Name));
                }
                else
                {
                    sb.AppendLine(string.Format("{0}obj.{1}();", indentStr, methodInfo.Name));
                }
            }
            else
            {
                if (methodInfo.IsStatic)
                {
                    sb.AppendLine(string.Format("{0}{1} rv = {2}.{3}();", indentStr, CSToLuaRegisterHelper.GetTypeFullName(methodInfo.ReturnType), classRegister.RegisterType, methodInfo.Name));
                }
                else
                {
                    sb.AppendLine(string.Format("{0}{1} rv = obj.{2}();", indentStr, CSToLuaRegisterHelper.GetTypeFullName(methodInfo.ReturnType), methodInfo.Name));
                }
            }
        }
示例#2
0
        private void RegisterConstructor()
        {
            if (!CSToLuaRegisterManager.GetInstance().IsConstructorExport(CSToLuaRegisterHelper.GetTypeFullName(registerType)))
            {
                return;
            }

            ConstructorInfo[] cInfos = registerType.GetConstructors(BindingFlags.Public | BindingFlags.Instance);
            if (cInfos != null && cInfos.Length > 0)
            {
                registerList.Add(new CSToLuaConstructorRegister(this, cInfos));
            }
        }
示例#3
0
 public string GetRegisterFileName()
 {
     return("CTL_" + CSToLuaRegisterHelper.GetTypeFullName(registerType).Replace(".", "_"));
 }
        public string RegisterFunctionToLua(int indent)
        {
            if (constructorInfo == null || constructorInfo.Length == 0)
            {
                return("");
            }

            StringBuilder sb        = new StringBuilder();
            string        indentStr = "";

            sb.Append(CSToLuaRegisterHelper.GetRegisterFunStart(indent, "CreateInstance"));

            indent++;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}int top = luaState.GetTop();", indentStr));
            sb.AppendLine(string.Format("{0}System.Object[] pInfos = new System.Object[top-1];", indentStr));
            sb.AppendLine(string.Format("{0}for(int i =0;i<top -1;i++){{", indentStr));
            indent++;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}pInfos[i] = luaState.ToSystemObject(i+2,typeof(System.Object));", indentStr));
            indent--;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}}}", indentStr));
            sb.AppendLine(string.Format("{0}try{{", indentStr));
            indent++;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}{1} obj = ({1})System.Activator.CreateInstance(typeof({1}), pInfos);", indentStr, CSToLuaRegisterHelper.GetTypeFullName(classRegister.RegisterType)));
            sb.Append(CSToLuaRegisterHelper.GetPushAction(indent, classRegister.RegisterType, "obj"));
            indent--;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}}}catch{{", indentStr));
            indent++;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}luaState.PushNil();", indentStr));
            indent--;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}}}", indentStr));
            sb.AppendLine(string.Format("{0}return 1;", indentStr));
            indent--;

            sb.Append(CSToLuaRegisterHelper.GetRegisterFunEnd(indent));

            return(sb.ToString());
        }
示例#5
0
        public void ConvertCSToLua(string dir)
        {
            if (aConfig == null || aConfig.exportClasses == null || aConfig.exportClasses.Count == 0)
            {
                return;
            }

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("using Game.Core.DotLua;");
            sb.AppendLine("public static class CSToLua{");
            sb.AppendLine("public static void InitStaticRegistToLua(){");

            foreach (ClassConfig cc in aConfig.exportClasses)
            {
                Type type = CSToLuaRegisterHelper.GetTypeByName(cc.name);
                if (type != null)
                {
                    DebugLog(cc.name);

                    CSToLuaClassRegister cr = new CSToLuaClassRegister(type);
                    string script           = cr.RegisterToLua();
                    string filePath         = dir + "/" + cr.GetRegisterFileName() + ".cs";
                    File.WriteAllText(filePath, script);

                    sb.AppendLine(string.Format("LuaInstance.instance.RegisterData.AddStaticRegisterData(new LuaStaticRegisterData(typeof({0}),{1}.RegisterToLua));", CSToLuaRegisterHelper.GetTypeFullName(cr.RegisterType), cr.GetRegisterFileName()));
                }
            }

            sb.AppendLine("}}");

            string cstoluaPath = dir + "/CSToLua.cs";

            File.WriteAllText(cstoluaPath, sb.ToString());
        }
        // no params ,no default value
        private void RegisterNPamasNDefaultMethod(int indent, StringBuilder sb, int startIndex)
        {
            string        indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            List <string> values    = new List <string>();

            for (int i = 0; i < parTypes.Count; i++)
            {
                sb.Append(CSToLuaRegisterHelper.GetToAction(indent, parTypes[i], startIndex + i, "v" + i));
                if (parRefIndex.IndexOf(i) >= 0)
                {
                    values.Add("ref v" + i);
                }
                else if (parOutIndex.IndexOf(i) >= 0)
                {
                    values.Add("out v" + i);
                }
                else
                {
                    values.Add("v" + i);
                }
            }
            if (methodInfo.ReturnType == typeof(void))
            {
                if (methodInfo.IsStatic)
                {
                    sb.AppendLine(string.Format("{0}{1}.{2}({3});", indentStr, classRegister.RegisterType, methodInfo.Name, string.Join(",", values.ToArray())));
                }
                else
                {
                    sb.AppendLine(string.Format("{0}obj.{1}({2});", indentStr, methodInfo.Name, string.Join(",", values.ToArray())));
                }
            }
            else
            {
                if (methodInfo.IsStatic)
                {
                    sb.AppendLine(string.Format("{0}{1} rv = {2}.{3}({4});", indentStr, CSToLuaRegisterHelper.GetTypeFullName(methodInfo.ReturnType), classRegister.RegisterType, methodInfo.Name, string.Join(",", values.ToArray())));
                }
                else
                {
                    sb.AppendLine(string.Format("{0}{1} rv = obj.{2}({3});", indentStr, CSToLuaRegisterHelper.GetTypeFullName(methodInfo.ReturnType), methodInfo.Name, string.Join(",", values.ToArray())));
                }
            }
        }
        //have params but no default
        private void RegisterParamsNDefaultMethod(int indent, StringBuilder sb, int startIndex)
        {
            string        indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            List <string> values    = new List <string>();

            for (int i = 0; i < parTypes.Count - 1; i++)
            {
                sb.Append(CSToLuaRegisterHelper.GetToAction(indent, parTypes[i], startIndex + i, "v" + i));
                if (parRefIndex.IndexOf(i) >= 0)
                {
                    values.Add("ref v" + i);
                }
                else if (parOutIndex.IndexOf(i) >= 0)
                {
                    values.Add("out v" + i);
                }
                else
                {
                    values.Add("v" + i);
                }
            }
            Type   paramsType     = parTypes[parTypes.Count - 1];
            string paramsTypeName = CSToLuaRegisterHelper.GetTypeFullName(paramsType);

            paramsTypeName = paramsTypeName.Replace("[]", "");
            Type sPType = CSToLuaRegisterHelper.GetTypeByName(paramsTypeName);

            sb.AppendLine(string.Format("{0}{1}[] ps;", indentStr, paramsTypeName));
            sb.AppendLine(string.Format("{0}if(top > " + (startIndex + parTypes.Count - 2) + "){{", indentStr));
            indent++;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}ps = new {1}[{2}];", indentStr, paramsTypeName, (startIndex + parTypes.Count - 3)));
            sb.AppendLine(string.Format("{0}for(int i =0;i<top - " + (startIndex + parTypes.Count - 2) + ";i++){{", indentStr));
            indent++;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            if (CSToLuaRegisterHelper.IsBaseType(sPType))
            {
                sb.AppendLine(string.Format("{0}ps[{1}]={2}luaState.{3}({4});", indentStr, "i", CSToLuaRegisterHelper.GetToTypeCast(sPType),
                                            CSToLuaRegisterHelper.GetToActionStr(sPType), (startIndex + parTypes.Count - 1) + "+i"));
            }
            else
            {
                sb.AppendLine(string.Format("{0}ps[{1}]=({2})luaState.ToSystemObject({3},typeof({2}));", indentStr, "i", paramsTypeName, (startIndex + parTypes.Count - 1) + "+i"));
            }
            indent--;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}}}", indentStr));
            indent--;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}}}else{{", indentStr));
            indent++;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}ps = new {1}[0];", indentStr, paramsTypeName));
            indent--;
            indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            sb.AppendLine(string.Format("{0}}}", indentStr));
            values.Add("ps");
            if (methodInfo.ReturnType == typeof(void))
            {
                if (methodInfo.IsStatic)
                {
                    sb.AppendLine(string.Format("{0}{1}.{2}({3});", indentStr, classRegister.RegisterType, methodInfo.Name, string.Join(",", values.ToArray())));
                }
                else
                {
                    sb.AppendLine(string.Format("{0}obj.{1}({2});", indentStr, methodInfo.Name, string.Join(",", values.ToArray())));
                }
            }
            else
            {
                if (methodInfo.IsStatic)
                {
                    sb.AppendLine(string.Format("{0}{1} rv = {2}.{3}({4});", indentStr, CSToLuaRegisterHelper.GetTypeFullName(methodInfo.ReturnType), classRegister.RegisterType, methodInfo.Name, string.Join(",", values.ToArray())));
                }
                else
                {
                    sb.AppendLine(string.Format("{0}{1} rv = obj.{2}({3});", indentStr, CSToLuaRegisterHelper.GetTypeFullName(methodInfo.ReturnType), methodInfo.Name, string.Join(",", values.ToArray())));
                }
            }
        }
        //No params but have default
        private void RegisterNParamsDefaultMethod(int indent, StringBuilder sb, int startIndex, bool ingoreLast = false)
        {
            string        indentStr = CSToLuaRegisterHelper.GetIndent(indent);
            List <string> values    = new List <string>();

            for (int i = 0; i < parDefaultStartIndex; i++)
            {
                sb.Append(CSToLuaRegisterHelper.GetToAction(indent, parTypes[i], startIndex + i, "v" + i));
                if (parRefIndex.IndexOf(i) >= 0)
                {
                    values.Add("ref v" + i);
                }
                else if (parOutIndex.IndexOf(i) >= 0)
                {
                    values.Add("out v" + i);
                }
                else
                {
                    values.Add("v" + i);
                }
            }

            for (int i = parDefaultStartIndex; i < parTypes.Count; i++)
            {
                string typeName = CSToLuaRegisterHelper.GetTypeFullName(parTypes[i]);
                object defValue = methodInfo.GetParameters()[i].DefaultValue;
                string defStr   = CSToLuaRegisterHelper.GetDefaultValue(defValue, parTypes[i]);
                sb.AppendLine(string.Format("{0}{1} v" + i + " = {2};", indentStr, typeName, defStr));
            }
            if (methodInfo.ReturnType != typeof(void))
            {
                sb.AppendLine(string.Format("{0}{1} rv = {2};", indentStr, CSToLuaRegisterHelper.GetTypeFullName(methodInfo.ReturnType), CSToLuaRegisterHelper.GetDefaultValue(methodInfo.ReturnType)));
            }

            for (int i = 0; i < (ingoreLast ? parTypes.Count - parDefaultStartIndex : parTypes.Count - parDefaultStartIndex + 1); i++)
            {
                sb.AppendLine(string.Format("{0}if(top == {1}){{", indentStr, startIndex + parDefaultStartIndex + i - 1));
                indent++;
                indentStr = CSToLuaRegisterHelper.GetIndent(indent);
                List <string> newValues = new List <string>();
                newValues.AddRange(values);

                for (int j = 0; j < i; j++)
                {
                    sb.Append(CSToLuaRegisterHelper.GetToActionWithNoType(indent, parTypes[parDefaultStartIndex + j], startIndex + parDefaultStartIndex + j, "v" + (parDefaultStartIndex + j)));
                    newValues.Add("v" + (parDefaultStartIndex + j));
                }

                if (methodInfo.ReturnType == typeof(void))
                {
                    if (methodInfo.IsStatic)
                    {
                        sb.AppendLine(string.Format("{0}{1}.{2}({3});", indentStr, classRegister.RegisterType, methodInfo.Name, string.Join(",", newValues.ToArray())));
                    }
                    else
                    {
                        sb.AppendLine(string.Format("{0}obj.{1}({2});", indentStr, methodInfo.Name, string.Join(",", newValues.ToArray())));
                    }
                }
                else
                {
                    if (methodInfo.IsStatic)
                    {
                        sb.AppendLine(string.Format("{0}rv = {1}.{2}({3});", indentStr, classRegister.RegisterType, methodInfo.Name, string.Join(",", newValues.ToArray())));
                    }
                    else
                    {
                        sb.AppendLine(string.Format("{0}rv = obj.{1}({2});", indentStr, methodInfo.Name, string.Join(",", newValues.ToArray())));
                    }
                }
                indent--;
                indentStr = CSToLuaRegisterHelper.GetIndent(indent);
                sb.AppendLine(string.Format("{0}}}", indentStr));
            }
        }
示例#9
0
        private string RegisterGetFunction(int indent)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(CSToLuaRegisterHelper.GetRegisterFunStart(indent, GetFunName(CSToLuaFieldType.Get)));
            indent++;
            if (fieldInfo.IsStatic)
            {
                sb.Append(CSToLuaRegisterHelper.GetPushAction(indent, fieldInfo.FieldType, CSToLuaRegisterHelper.GetTypeFullName(classRegister.RegisterType) + "." + fieldInfo.Name));
            }
            else
            {
                sb.Append(CSToLuaRegisterHelper.GetToUserDataAction(indent, classRegister.RegisterType, 1, "obj"));
                sb.Append(CSToLuaRegisterHelper.GetPushAction(indent, fieldInfo.FieldType, "obj." + fieldInfo.Name));
            }
            sb.AppendLine(string.Format("{0}return 1;", CSToLuaRegisterHelper.GetIndent(indent)));
            indent--;
            sb.Append(CSToLuaRegisterHelper.GetRegisterFunEnd(indent));

            return(sb.ToString());
        }
        private string RegisterSetFunction(int indent)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(CSToLuaRegisterHelper.GetRegisterFunStart(indent, GetFunName(CSToLuaPropertyType.Set)));
            indent++;
            if (propertyInfo.GetSetMethod().IsStatic)
            {
                sb.Append(CSToLuaRegisterHelper.GetToAction(indent, propertyInfo.PropertyType, 1, "v"));
                sb.AppendLine(string.Format("{0}{1}.{2} = v;", CSToLuaRegisterHelper.GetIndent(indent), CSToLuaRegisterHelper.GetTypeFullName(classRegister.RegisterType), propertyInfo.Name));
            }
            else
            {
                sb.Append(CSToLuaRegisterHelper.GetToUserDataAction(indent, classRegister.RegisterType, 1, "obj"));
                sb.Append(CSToLuaRegisterHelper.GetToAction(indent, propertyInfo.PropertyType, 2, "v"));
                sb.AppendLine(string.Format("{0}obj.{1} = v;", CSToLuaRegisterHelper.GetIndent(indent), propertyInfo.Name));
            }
            sb.AppendLine(string.Format("{0}return 0;", CSToLuaRegisterHelper.GetIndent(indent)));
            indent--;
            sb.Append(CSToLuaRegisterHelper.GetRegisterFunEnd(indent));

            return(sb.ToString());
        }