private void FunctionsGUI() { if (m_ScriptPrescription.m_Functions == null) { GUILayout.FlexibleSpace(); return; } EditorGUILayout.BeginHorizontal(); { GUILayout.Label("Functions", GUILayout.Width(kLabelWidth - 4)); EditorGUILayout.BeginVertical(m_Styles.m_LoweredBox); m_OptionsScroll = EditorGUILayout.BeginScrollView(m_OptionsScroll); { bool expanded = FunctionHeader("General", true); for (int i = 0; i < m_ScriptPrescription.m_Functions.Length; i++) { FunctionData func = m_ScriptPrescription.m_Functions[i]; if (func.name == null) { expanded = FunctionHeader(func.comment, false); } else if (expanded) { Rect toggleRect = GUILayoutUtility.GetRect(GUIContent.none, EditorStyles.toggle); toggleRect.x += 15; toggleRect.width -= 15; bool include = GUI.Toggle(toggleRect, func.include, new GUIContent(func.name, func.comment)); if (include != func.include) { m_ScriptPrescription.m_Functions[i].include = include; SetFunctionIsIncluded(m_BaseClass, func.name, include); } } } } EditorGUILayout.EndScrollView(); EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); }
private void WriteFunction(FunctionData function) { string paramString = string.Empty; string overrideString; string returnTypeString; string functionContentString; string paramStringWithoutTypes = string.Empty; switch (m_ScriptPrescription.m_Lang) { /*case Language.JavaScript: // Comment WriteComment (function.comment); // Function header for (int i=0; i<function.parameters.Length; i++) { paramString += function.parameters[i].name + " : " + TranslateTypeToJavascript (function.parameters[i].type); if (i < function.parameters.Length-1) paramString += ", "; } overrideString = (function.isVirtual ? "override " : string.Empty); returnTypeString = (function.returnType == null ? " " : " : " + TranslateTypeToJavascript (function.returnType) + " "); m_Writer.WriteLine (m_Indentation + overrideString + "function " + function.name + " (" + paramString + ")" + returnTypeString + "{"); // Function content IndentLevel++; functionContentString = (function.returnType == null ? string.Empty : function.returnDefault + ";"); m_Writer.WriteLine (m_Indentation + functionContentString); IndentLevel--; m_Writer.WriteLine (m_Indentation + "}"); break;*/ case Language.CSharp: // Comment WriteComment(function.comment); // Function header for (int i = 0; i < function.parameters.Length; i++) { paramString += function.parameters[i].type + " " + function.parameters[i].name; paramStringWithoutTypes += function.parameters[i].name; if (i < function.parameters.Length - 1) { paramString += ", "; paramStringWithoutTypes += ", "; } } overrideString = (function.isVirtual ? "public override " : string.Empty); returnTypeString = (function.returnType == null ? "void " : function.returnType + " "); m_Writer.WriteLine(m_Indentation + overrideString + returnTypeString + function.name + "(" + paramString + ") {"); // Function content IndentLevel++; { if (function.isVirtual == true) { WriteBlankLine(); m_Writer.WriteLine(m_Indentation + "base." + function.name + "(" + paramStringWithoutTypes + ");"); WriteBlankLine(); } functionContentString = (function.returnType == null ? string.Empty : function.returnDefault + ";"); m_Writer.WriteLine(m_Indentation + functionContentString); WriteBlankLine(); } IndentLevel--; m_Writer.WriteLine(m_Indentation + "}"); break; /*case Language.Boo: // Comment WriteComment (function.comment); // Function header for (int i=0; i<function.parameters.Length; i++) { paramString += function.parameters[i].name + " as " + TranslateTypeToBoo (function.parameters[i].type); if (i < function.parameters.Length-1) paramString += ", "; } overrideString = (function.isVirtual ? "public override " : string.Empty); returnTypeString = (function.returnType == null ? string.Empty : " as " + TranslateTypeToJavascript (function.returnType)); m_Writer.WriteLine (m_Indentation + overrideString + "def " + function.name + " (" + paramString + ")" + returnTypeString + ":"); // Function content IndentLevel++; functionContentString = (function.returnType == null ? "pass" : function.returnDefault); m_Writer.WriteLine (m_Indentation + functionContentString); IndentLevel--; break;*/ } }
private void HandleBaseClass() { if (m_TemplateNames.Length == 0) { m_BaseClass = null; return; } // Get base class m_BaseClass = GetBaseClass(m_ScriptPrescription.m_Template); // If base class was found, strip first line from template if (m_BaseClass != null) { m_ScriptPrescription.m_Template = m_ScriptPrescription.m_Template.Substring(m_ScriptPrescription.m_Template.IndexOf("\n") + 1); } m_IsEditorClass = IsEditorClass(m_BaseClass); m_IsCustomEditor = (m_BaseClass == kCustomEditorClassName); m_ScriptPrescription.m_StringReplacements.Clear(); // Try to find function file first in custom templates folder and then in built-in //string functionDataFilePath = Path.Combine(GetAbsoluteCustomTemplatePath(), m_BaseClass + ".functions.txt"); //if (!File.Exists(functionDataFilePath)) functionDataFilePath = Path.Combine(GetAbsoluteBuiltinTemplatePath(), m_BaseClass + ".functions.txt"); var functionDataFilePath = GetFunctionsPath(m_BaseClass); if (!File.Exists(functionDataFilePath)) { m_ScriptPrescription.m_Functions = null; } else { StreamReader reader = new StreamReader(functionDataFilePath); List <FunctionData> functionList = new List <FunctionData>(); int lineNr = 1; while (!reader.EndOfStream) { string functionLine = reader.ReadLine(); string functionLineWhole = functionLine; try { if (functionLine.Substring(0, 7).ToLower() == "header ") { functionList.Add(new FunctionData(functionLine.Substring(7))); continue; } FunctionData function = new FunctionData(); bool defaultInclude = false; if (functionLine.Substring(0, 8) == "DEFAULT ") { defaultInclude = true; functionLine = functionLine.Substring(8); } if (functionLine.Substring(0, 9) == "override ") { function.isVirtual = true; functionLine = functionLine.Substring(9); } string returnTypeString = GetStringUntilSeperator(ref functionLine, " "); function.returnType = (returnTypeString == "void" ? null : returnTypeString); function.name = GetStringUntilSeperator(ref functionLine, "("); string parameterString = GetStringUntilSeperator(ref functionLine, ")"); if (function.returnType != null) { function.returnDefault = GetStringUntilSeperator(ref functionLine, ";"); } function.comment = functionLine; string[] parameterStrings = parameterString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); List <ParameterData> parameterList = new List <ParameterData>(); for (int i = 0; i < parameterStrings.Length; i++) { string[] paramSplit = parameterStrings[i].Trim().Split(' '); parameterList.Add(new ParameterData(paramSplit[1], paramSplit[0])); } function.parameters = parameterList.ToArray(); function.include = GetFunctionIsIncluded(m_BaseClass, function.name, defaultInclude); functionList.Add(function); } catch (Exception e) { Debug.LogWarning("Malformed function line: \"" + functionLineWhole + "\"\n at " + functionDataFilePath + ":" + lineNr + "\n" + e); } lineNr++; } m_ScriptPrescription.m_Functions = functionList.ToArray(); } }
private void WriteFunction(FunctionData function) { string paramString = string.Empty; string overrideString; string returnTypeString; string functionContentString; string paramStringWithoutTypes = string.Empty; switch (m_ScriptPrescription.m_Lang) { /*case Language.JavaScript: * // Comment * WriteComment (function.comment); * * // Function header * for (int i=0; i<function.parameters.Length; i++) * { * paramString += function.parameters[i].name + " : " + TranslateTypeToJavascript (function.parameters[i].type); * if (i < function.parameters.Length-1) * paramString += ", "; * } * overrideString = (function.isVirtual ? "override " : string.Empty); * returnTypeString = (function.returnType == null ? " " : " : " + TranslateTypeToJavascript (function.returnType) + " "); * m_Writer.WriteLine (m_Indentation + overrideString + "function " + function.name + " (" + paramString + ")" + returnTypeString + "{"); * * // Function content * IndentLevel++; * functionContentString = (function.returnType == null ? string.Empty : function.returnDefault + ";"); * m_Writer.WriteLine (m_Indentation + functionContentString); * IndentLevel--; * m_Writer.WriteLine (m_Indentation + "}"); * * break;*/ case Language.CSharp: // Comment WriteComment(function.comment); // Function header for (int i = 0; i < function.parameters.Length; i++) { paramString += function.parameters[i].type + " " + function.parameters[i].name; paramStringWithoutTypes += function.parameters[i].name; if (i < function.parameters.Length - 1) { paramString += ", "; paramStringWithoutTypes += ", "; } } overrideString = (function.isVirtual ? "public override " : string.Empty); returnTypeString = (function.returnType == null ? "void " : function.returnType + " "); m_Writer.WriteLine(m_Indentation + overrideString + returnTypeString + function.name + "(" + paramString + ") {"); // Function content IndentLevel++; { if (function.isVirtual == true) { WriteBlankLine(); m_Writer.WriteLine(m_Indentation + "base." + function.name + "(" + paramStringWithoutTypes + ");"); WriteBlankLine(); } functionContentString = (function.returnType == null ? string.Empty : function.returnDefault + ";"); m_Writer.WriteLine(m_Indentation + functionContentString); WriteBlankLine(); } IndentLevel--; m_Writer.WriteLine(m_Indentation + "}"); break; /*case Language.Boo: * // Comment * WriteComment (function.comment); * * // Function header * for (int i=0; i<function.parameters.Length; i++) * { * paramString += function.parameters[i].name + " as " + TranslateTypeToBoo (function.parameters[i].type); * if (i < function.parameters.Length-1) * paramString += ", "; * } * overrideString = (function.isVirtual ? "public override " : string.Empty); * returnTypeString = (function.returnType == null ? string.Empty : " as " + TranslateTypeToJavascript (function.returnType)); * m_Writer.WriteLine (m_Indentation + overrideString + "def " + function.name + " (" + paramString + ")" + returnTypeString + ":"); * * // Function content * IndentLevel++; * functionContentString = (function.returnType == null ? "pass" : function.returnDefault); * m_Writer.WriteLine (m_Indentation + functionContentString); * IndentLevel--; * * break;*/ } }