//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()))); } } }