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