コード例 #1
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())));
                }
            }
        }