Exemplo n.º 1
0
    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();
    }
Exemplo n.º 2
0
    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();
    }
Exemplo n.º 3
0
    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());
    }
Exemplo n.º 4
0
    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());
    }
Exemplo n.º 5
0
    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);
    }