示例#1
0
        private StringBuilder GenerateFunction(TypeDefFunction typeDefFunction)
        {
            StringBuilder result = new StringBuilder(string.Empty);

            if (_generateDocumentation)
            {
                result.Append(GenerateFunctionDocumentation(typeDefFunction));
            }
            var fixedTypeDefName = GetFixedTypeDefFunctionName(typeDefFunction.Name);
            var cSharpReturnType = new NativeReturnTypeToCSharpTypingConverter().Convert(null, typeDefFunction.ReturnType.NativeType);

            result.Append($"\t\tpublic {cSharpReturnType} {typeDefFunction.Name.FirstCharToUpper()}(");
            foreach (var parameter in typeDefFunction.Parameters)
            {
                result.Append($"{new NativeTypeToCSharpTypingConverter().Convert(null, parameter.NativeType, false)} {GetFixedTypeDefParameterName(parameter.Name)}");
                if (typeDefFunction.Parameters.Last() != parameter)
                {
                    result.Append(", ");
                }
            }
            result.Append($")\n\t\t{{\n");
            result.Append($"\t\t\tif ({fixedTypeDefName} == null) {fixedTypeDefName} = (Function) native.GetObjectProperty(\"{typeDefFunction.Name}\");\n");
            if (typeDefFunction.ReturnType.Name != "void")
            {
                if (typeDefFunction.ReturnType.Name == "any")
                {
                    result.Append($"\t\t\treturn {fixedTypeDefName}.Call(native");
                }
                else if (typeDefFunction.ReturnType.Name == "Vector3")
                {
                    result.Append($"\t\t\var vectorObj = (JSObject) {fixedTypeDefName}.Call(native");
                    result.Append($"\t\t\return new Vector3((float) vectorObj.GetObjectProperty(\"x\"), (float) vectorObj.GetObjectProperty(\"y\"),(float) vectorObj.GetObjectProperty(\"z\"));");
                }
                else if (typeDefFunction.ReturnType.NativeType.Count > 1)
                {
                    result.Append($"\t\t\var results = (Array) {fixedTypeDefName}.Call(native");
                    var returnTypeForTyping = "return (";
                    for (int i = 0; i < typeDefFunction.ReturnType.NativeType.Count; i++)
                    {
                        returnTypeForTyping += $"({new NativeTypeToCSharpTypingConverter().Convert(null, typeDefFunction.ReturnType.NativeType[i], false)}) results[{i}]";
                        if (i != typeDefFunction.ReturnType.NativeType.Count - 1)
                        {
                            returnTypeForTyping += ", ";
                        }
                    }
                    returnTypeForTyping += ");";
                    result.Append(returnTypeForTyping);
                }
                else
                {
                    result.Append($"\t\t\treturn ({cSharpReturnType}) {fixedTypeDefName}.Call(native");
                }
            }
            else
            {
                result.Append($"\t\t\t{fixedTypeDefName}.Call(native");
            }
            foreach (var parameter in typeDefFunction.Parameters)
            {
                if (typeDefFunction.Parameters.First() == parameter)
                {
                    result.Append(", ");
                }
                result.Append($"{GetFixedTypeDefParameterName(parameter.Name)}");
                if (typeDefFunction.Parameters.Last() != parameter)
                {
                    result.Append(", ");
                }
            }
            result.Append($");\n");

            result.Append($"\t\t}}\n");

            return(result);
        }
示例#2
0
        private StringBuilder GenerateFunction(TypeDefFunction typeDefFunction)
        {
            StringBuilder result = new StringBuilder(string.Empty);

            if (_generateDocumentation)
            {
                result.Append(GenerateFunctionDocumentation(typeDefFunction));
            }
            var fixedTypeDefName = GetFixedTypeDefFunctionName(typeDefFunction.Name);
            var cSharpReturnType = new NativeReturnTypeToCSharpTypingConverter().Convert(null, typeDefFunction.ReturnType.NativeType);

            result.Append($"\t\tpublic {cSharpReturnType} {typeDefFunction.Name.FirstCharToUpper()}(");
            foreach (var parameter in typeDefFunction.Parameters)
            {
                result.Append($"{new NativeTypeToCSharpTypingConverter().Convert(null, parameter.NativeType, false)} {GetFixedTypeDefParameterName(parameter.Name)}");
                if (typeDefFunction.Parameters.Last() != parameter)
                {
                    result.Append(", ");
                }
            }
            result.Append($")\n\t\t{{\n");
            result.Append($"\t\t\tif ({fixedTypeDefName} == null) {fixedTypeDefName} = (Function) native.GetObjectProperty(\"{typeDefFunction.Name}\");\n");
            if (typeDefFunction.ReturnType.Name != "void")
            {
                if (typeDefFunction.ReturnType.Name == "any")
                {
                    result.Append($"\t\t\treturn {fixedTypeDefName}.Call(native");
                    GenerateCallParameters(result, typeDefFunction);
                }
                else if (typeDefFunction.ReturnType.NativeType.Count > 1)
                {
                    result.Append($"\t\t\tvar results = (Array) {fixedTypeDefName}.Call(native");
                    GenerateCallParameters(result, typeDefFunction);
                    var returnTypeForTyping = "\t\t\treturn (";
                    for (var i = 0; i < typeDefFunction.ReturnType.NativeType.Count; i++)
                    {
                        var tupleReturnType       = typeDefFunction.ReturnType.NativeType[i];
                        var cSharpTupleReturnType =
                            new NativeTypeToCSharpTypingConverter().Convert(null, tupleReturnType, false);
                        returnTypeForTyping += TransformReturnValue(cSharpTupleReturnType, $"results[{i}]");
                        if (i != typeDefFunction.ReturnType.NativeType.Count - 1)
                        {
                            returnTypeForTyping += ", ";
                        }
                    }
                    returnTypeForTyping += ");\n";
                    result.Append(returnTypeForTyping);
                }
                else
                {
                    var returnValue = new StringBuilder();
                    returnValue.Append($"{fixedTypeDefName}.Call(native");
                    GenerateCallParameters(returnValue, typeDefFunction, false);
                    var transformedResult = TransformReturnValue(cSharpReturnType, returnValue.ToString());
                    result.Append($"\t\t\treturn {transformedResult};\n");
                }
            }
            else
            {
                result.Append($"\t\t\t{fixedTypeDefName}.Call(native");
                GenerateCallParameters(result, typeDefFunction);
            }

            result.Append($"\t\t}}\n");

            return(result);
        }