public static void GenBindings() { //var d = typeof(UnityEngine.MonoBehaviour).GetConstructors(); //Debug.Log("d.length=" + d.Length); //return; if (EditorApplication.isCompiling) { EditorUtility.DisplayDialog("提示", "等待Unity编译完再点", "确定" ); return; } Type[] arrEnums, arrClasses; HashSet <string> bridgeTypes; if (!JSBindingSettings.CheckClasses(out arrEnums, out arrClasses, out bridgeTypes)) { return; } JSDataExchangeEditor.reset(); UnityEngineManual.initManual(); CSGenerator.GenBindings(arrEnums, arrClasses); JSGenerator.GenBindings(arrEnums, arrClasses); CSWrapGenerator.GenWraps(arrEnums, arrClasses, bridgeTypes); AssetDatabase.Refresh(); }
public static void GenBindings() { if (EditorApplication.isCompiling) { EditorUtility.DisplayDialog("Tip:", "please wait EditorApplication compiling", "OK"); return; } Type[] classes = JSBindingSettings.CheckClassBindings(); if (classes == null) { return; } // if (!EditorUtility.DisplayDialog("Tip", // "Files in these directories will all be deleted and re-created: \n" + // JSBindingSettings.csGenDir + "\n", // "OK", "Cancel") // ) // { // return; // } CSGenerator.Log = JSGenerator.Log = Debug.Log; CSGenerator.LogError = JSGenerator.LogError = Debug.LogError; JSGenerator.Application_dataPath = Application.dataPath; JSDataExchangeEditor.reset(); UnityEngineManual.InitManual(); CSGenerator.GenBindings(classes); JSGenerator.GenBindings(classes, JSBindingSettings.enums); UnityEngineManual.AfterUse(); AssetDatabase.Refresh(); }
public string Get_Return(string expVar) { if (elementType == null) { Debug.LogError("JSDataExchange_Arr elementType == null !!"); return(""); } var sb = new StringBuilder(); string getValMethod = JSDataExchangeEditor.SetMetatypeKeyword(elementType); // 2015.Sep.2 // +判断arrRet为null的情况 if (elementType.ContainsGenericParameters) { sb.AppendFormat(" var arrRet = (Array){0};\n", expVar) .AppendFormat(" for (int i = 0; arrRet != null && i < arrRet.Length; i++)\n") .Append(" [[\n") .AppendFormat(" {0}((int)JSApi.SetType.SaveAndTempTrace, arrRet.GetValue(i));\n", getValMethod) .AppendFormat(" JSApi.moveSaveID2Arr(i);\n") .AppendFormat(" ]]\n") .AppendFormat( " JSApi.setArrayS((int)JSApi.SetType.Rval, (arrRet != null ? arrRet.Length : 0), true);"); } else { sb.AppendFormat(" var arrRet = {0};\n", expVar) .AppendFormat(" for (int i = 0; arrRet != null && i < arrRet.Length; i++)\n") .Append(" [[\n") .AppendFormat(" {0}((int)JSApi.SetType.SaveAndTempTrace, {1}arrRet[i]);\n", getValMethod, elementType.IsEnum ? "(int)" : "") .AppendFormat(" JSApi.moveSaveID2Arr(i);\n") .AppendFormat(" ]]\n") .AppendFormat( " JSApi.setArrayS((int)JSApi.SetType.Rval, (arrRet != null ? arrRet.Length : 0), true);"); } sb.Replace("[[", "{"); sb.Replace("]]", "}"); return(sb.ToString()); }
public string Get_GetParam(Type t) { elementType = t.GetElementType(); if (elementType.IsArray) { //...error } var sb = new StringBuilder(); string getVal = JSDataExchangeEditor.GetMetatypeKeyword(elementType); string arrayFullName = string.Empty; string elementFullName = string.Empty; if (elementType.IsGenericParameter) { arrayFullName = "object[]"; elementFullName = "object"; } else { arrayFullName = JSNameMgr.GetTypeFullName(t); elementFullName = JSNameMgr.GetTypeFullName(elementType); } sb.AppendFormat("JSDataExchangeMgr.GetJSArg<{0}>(() =>\n", arrayFullName) .Append(" [[\n") .AppendFormat(" int jsObjID = JSApi.getObject((int)JSApi.GetType.Arg);\n") .AppendFormat(" int length = JSApi.getArrayLength(jsObjID);\n") .AppendFormat(" var ret = new {0}[length];\n", elementFullName) .AppendFormat(" for (var i = 0; i < length; i++) [[\n") .AppendFormat(" JSApi.getElement(jsObjID, i);\n") .AppendFormat(" ret[i] = ({0}){1}((int)JSApi.GetType.SaveAndRemove);\n", elementFullName, getVal) .AppendFormat(" ]]\n") .AppendFormat(" return ret;\n") .AppendFormat(" ]])"); sb.Replace("[[", "{"); sb.Replace("]]", "}"); return(sb.ToString()); }
public static StringBuilder Build_DelegateFunction(Type classType, MemberInfo memberInfo, Type delType, int methodTag, int argIndex) { // building a closure // a function having a up-value: jsFunction string getDelFunctionName = GetMethodArg_DelegateFuncionName(classType, memberInfo.Name, methodTag, argIndex); var sb = new StringBuilder(); MethodInfo delInvoke = delType.GetMethod("Invoke"); ParameterInfo[] ps = delInvoke.GetParameters(); Type returnType = delType.GetMethod("Invoke").ReturnType; var argsParam = new cg.args(); for (int i = 0; i < ps.Length; i++) { argsParam.Add(ps[i].Name); } // format as <t,u,v> string stringTOfMethod = string.Empty; if (delType.ContainsGenericParameters) { var arg = new cg.args(); foreach (var t in delType.GetGenericArguments()) { arg.Add(t.Name); } stringTOfMethod = arg.Format(cg.args.ArgsFormat.GenericT); } // this function name is used in BuildFields, don't change sb.AppendFormat("public static {0} {1}{2}(CSRepresentedObject objFunction)\n[[\n", JSNameMgr.GetTypeFullName(delType, true), // [0] getDelFunctionName, // [2] stringTOfMethod // [1] ); sb.Append(" if (objFunction == null || objFunction.jsObjID == 0)\n"); sb.Append(" [[\n return null;\n ]]\n"); sb.AppendFormat(" {0} action = ({0})JSMgr.getJSFunCSDelegateRel(objFunction.jsObjID); \n", JSNameMgr.GetTypeFullName(delType, true)); sb.Append(" if (action != null)\n return action;\n\n"); sb.AppendFormat(" action = ({0}) => \n", argsParam.Format(cg.args.ArgsFormat.OnlyList)); sb.AppendFormat(" [[\n"); sb.AppendFormat(" JSMgr.vCall.CallJSFunctionValue(0, objFunction.jsObjID{0}{1});\n", (argsParam.Count > 0) ? ", " : "", argsParam); if (returnType != typeof(void)) { sb.Append(" return (" + JSNameMgr.GetTypeFullName(returnType) + ")" + JSDataExchangeEditor.Get_GetJSReturn(returnType) + ";\n"); } sb.AppendFormat(" ]];\n"); sb.Append(" JSMgr.addJSFunCSDelegateRel(objFunction.jsObjID, action);\n"); sb.Append(" return action;\n"); sb.AppendFormat("]]\n"); return(sb); }