/// <summary> /// 生成LuaPanel /// </summary> /// <param name="document"></param> private void GetLuaPanelScript(LuaDocumentNode document) { var panelName = $"{gameObject.name}Panel"; var luaUIPanel = gameObject.GetComponent <MLuaUIPanel>(); if (luaUIPanel == null) { EditorUtility.DisplayDialog("导出错误", "目标找不到LuaUIPanel", "ok"); return; } document.ModelNode = new LuaModelNode($"UI.{panelName}"); document.RemoveFunction("Bind"); //Bind函数 var bindFunction = new LuaFunctionNode("Bind", LuaMemberType.Global, new List <string>() { "ctrl" }, new List <LuaBaseStatementNode>()); document.AddFunction(bindFunction); bindFunction.statementNodes.Add(new LuaScriptStatementNode("--dont override this function")); bindFunction.statementNodes.Add(new LuaScriptStatementNode("local l_panel = {}")); bindFunction.statementNodes.Add(new LuaScriptStatementNode("l_panel.PanelRef = ctrl.uObj:GetComponent(\"MLuaUIPanel\")")); Dictionary <string, string> comRefsCodes = LuaUIGroupEditor.GetComRefsCodes(luaUIPanel.ComRefs); foreach (var item in comRefsCodes) { StringBuilder builder = new StringBuilder(); builder.Append("l_panel."); builder.Append(item.Key); if (!string.IsNullOrEmpty(item.Value)) { builder.Append(" = l_panel.PanelRef."); builder.Append(item.Value); } var getComRefStatement = new LuaScriptStatementNode(builder.ToString()); bindFunction.statementNodes.Add(getComRefStatement); } var groupsCodes = LuaUIGroupEditor.GetGroupsCodes(luaUIPanel.Groups, "l_panel.", " = l_panel.PanelRef."); foreach (var item in groupsCodes) { var getComRefStatement = new LuaScriptStatementNode(item.Key + item.Value); bindFunction.statementNodes.Add(getComRefStatement); } //返回代码 bindFunction.statementNodes.Add(new LuaScriptStatementNode("return l_panel")); MFileEx.SaveText(document.ToString(), LuaPanelPath); }
//生成Template的lua代码 private void GetLuaUITemplateScript(LuaDocumentNode document) { document.ModelNode = new LuaModelNode("UITemplate"); document.AddRequire(new LuaRequireNode("UI/BaseUITemplate")); document.ClassName = group.ClassName; document.ClassInitStatement = new LuaScriptStatementNode($"class(\"{group.ClassName}\", super)"); document.AddField(new LuaFieldNode("super", LuaMemberType.Local, new LuaScriptStatementNode("UITemplate.BaseUITemplate"))); document.RemoveFunction("ParameterDeclarations"); var SetDataFunc = new LuaFunctionNode("SetData", LuaMemberType.Local, new List <string>() { "data" }); var InitFunc = new LuaFunctionNode("Init", LuaMemberType.Local); var OnDestroyFunc = new LuaFunctionNode("OnDestroy", LuaMemberType.Local); var OnDeActiveFunc = new LuaFunctionNode("OnDeActive", LuaMemberType.Local); var ParameterDeclarationsFunction = new LuaFunctionNode("ParameterDeclarations", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); ParameterDeclarationsFunction.statementNodes.Add(new LuaScriptStatementNode("self.Parameter.LuaUIGroup = self:transform():GetComponent(\"MLuaUIGroup\")")); var groupCodes = GetGroupCodes(group, "self.Parameter.", " = self.Parameter.LuaUIGroup."); foreach (var item in groupCodes) { var getComRefStatement = new LuaScriptStatementNode(item.Key + item.Value); ParameterDeclarationsFunction.statementNodes.Add(getComRefStatement); } document.AddFunction(InitFunc); document.AddFunction(OnDestroyFunc); document.AddFunction(OnDeActiveFunc); document.AddFunction(SetDataFunc); document.AddFunction(ParameterDeclarationsFunction); MFileEx.SaveText(document.ToString(), LuaTemplatePath); }