コード例 #1
0
        // 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())));
                }
            }
        }
コード例 #2
0
        private string RegisterSetFunction(int indent)
        {
            StringBuilder sb = new StringBuilder();

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

            return(sb.ToString());
        }
コード例 #3
0
        //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())));
                }
            }
        }
コード例 #4
0
        //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));
            }
        }