private void UpdateConst() { var filePath = Path.Combine(LuaConst.luaDir, "UI\\UIConst.lua"); LuaDocumentNode luaDocument = new LuaDocumentNode(); luaDocument.Load(filePath); luaDocument.ModelNode = new LuaModelNode("UI"); var ctrlPath = PathEx.GetPathParentFolder(LuaCtrlPath); DirectoryInfo ctrlDirectory = new DirectoryInfo(ctrlPath); var files = ctrlDirectory.GetFiles(); var ctrlNames = from file in files where file.Name.EndsWith(".lua") select MFileEx.GetFileNameWithoutExtention(file.FullName).Replace("Ctrl", string.Empty); List <string> ctrlList = new List <string>(ctrlNames); StringBuilder initStatementBuilder = new StringBuilder(); initStatementBuilder.Append("{\n"); ctrlList.ForEach((index, str) => { initStatementBuilder.Append($"\t{str} = \"{str}\""); if (index != ctrlList.Count - 1) { initStatementBuilder.Append(",\n"); } }); initStatementBuilder.Append("\n}"); luaDocument.RemoveField("CtrlNames"); luaDocument.AddField(new LuaFieldNode("CtrlNames", LuaMemberType.Global, new LuaScriptStatementNode(initStatementBuilder.ToString()))); initStatementBuilder = new StringBuilder(); var handlerPath = PathEx.GetPathParentFolder(LuaHandlerPath); DirectoryInfo handlerDirectory = new DirectoryInfo(handlerPath); var handlerFiles = handlerDirectory.GetFiles(); var handlerNames = from file in handlerFiles where file.Name.EndsWith(".lua") select MFileEx.GetFileNameWithoutExtention(file.FullName).Replace("Handler", string.Empty); List <string> handlerList = new List <string>(handlerNames); initStatementBuilder.Append("{\n"); handlerList.ForEach((index, str) => { initStatementBuilder.Append($"\t{str} = \"{str}\""); if (index != handlerList.Count - 1) { initStatementBuilder.Append(",\n"); } }); initStatementBuilder.Append("\n}"); luaDocument.RemoveField("HandlerNames"); luaDocument.AddField(new LuaFieldNode("HandlerNames", LuaMemberType.Global, new LuaScriptStatementNode(initStatementBuilder.ToString()))); MFileEx.SaveText(luaDocument.ToString(), filePath); }
private void GetLuaModelScript(MLuaUICom comRef, LuaDocumentNode document, string savePath) { document.Load(savePath); var modelName = comRef.ModelName ?? $"{gameObject.name}Model"; document.AddRequire(new LuaRequireNode("Data/BaseModel")); document.AddRequire(new LuaRequireNode("Event/EventDispacher")); document.ModelNode = new LuaModelNode("Data"); document.ClassName = modelName; document.ClassInitStatement = new LuaScriptStatementNode($"class(\"{modelName}\", super)"); document.AddField(new LuaFieldNode("super", LuaMemberType.Local, new LuaScriptStatementNode("Data.BaseModel"))); var eventNameFieldName = $"{modelName}.{comRef.DataName.ToUpper()}"; var property = new LuaPropertyNode(comRef.DataName, LuaMemberType.Local); property.setStatementNodes.Add(new LuaScriptStatementNode($"if self._{comRef.DataName} == {comRef.DataName} then return end")); property.setStatementNodes.Add(new LuaScriptStatementNode(property.defualtSetStatement)); property.setStatementNodes.Add(new LuaScriptStatementNode($"{eventNameFieldName}:Dispatch(Data.onDataChange, {comRef.DataName})")); document.AddProperty(property); var eventNameField = new LuaFieldNode(eventNameFieldName, LuaMemberType.Global, new LuaScriptStatementNode($"EventDispatcher.new()")); document.AddField(eventNameField); document.AddFunction(new LuaFunctionNode("ctor", LuaMemberType.Local, null, new List <LuaBaseStatementNode>() { new LuaScriptStatementNode($"super.ctor(self, CtrlNames.{gameObject.name})") })); MFileEx.SaveText(document.ToString(), savePath); }
/// <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); }
private void SaveData() { StringBuilder builder = new StringBuilder(); foreach (var keyValuePair in stringDict) { builder.Append(keyValuePair.Key).Append("\t").Append(keyValuePair.Value); builder.Append(Environment.NewLine); } MFileEx.SaveText(builder.ToString(), txtPath); AssetDatabase.Refresh(); }
//生成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); }
/// <summary> /// 生成LuaCtrl /// </summary> /// <param name="document"></param> private void GetLuaCtrlScript(LuaDocumentNode document) { var panelName = $"{gameObject.name}Panel"; var ctrlName = $"{gameObject.name}Ctrl"; var defultModelName = $"{gameObject.name}Model"; var luaUIPanel = gameObject.GetComponent <MLuaUIPanel>(); if (luaUIPanel == null) { EditorUtility.DisplayDialog("导出错误", "目标找不到LuaUIPanel", "欧克"); return; } //不再覆盖 //document.RemoveFunction("BindEvents"); //document.RemoveFunction("UnBindEvents"); document.AddRequire(new LuaRequireNode("UI/UIBaseCtrl")); document.AddRequire(new LuaRequireNode($"UI/Panel/{panelName}")); document.ModelNode = new LuaModelNode("UI"); document.ClassName = ctrlName; document.ClassInitStatement = new LuaScriptStatementNode($"class(\"{ctrlName}\", super)"); document.AddField(new LuaFieldNode("super", LuaMemberType.Local, new LuaScriptStatementNode("UI.UIBaseCtrl"))); var ctorFunc = new LuaFunctionNode("ctor", LuaMemberType.Local, null, new List <LuaBaseStatementNode>() { new LuaScriptStatementNode($"super.ctor(self, CtrlNames.{gameObject.name}, UILayer.{uiLayer.ToString()}, nil, ActiveType.{activeType.ToString()})") }); var initFunc = new LuaFunctionNode("Init", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); initFunc.statementNodes.Add(new LuaScriptStatementNode($"self.panel = UI.{panelName}.Bind(self)")); var unInitFunc = new LuaFunctionNode("Uninit", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); unInitFunc.statementNodes.Add(new LuaScriptStatementNode("super.Uninit(self)")); unInitFunc.statementNodes.Add(new LuaScriptStatementNode("self.panel = nil")); LuaFunctionNode setupHandlerFunc = null; if (luaUIPanel.HandlerRef != null) { setupHandlerFunc = new LuaFunctionNode("SetupHandlers", LuaMemberType.Local, null, new List <LuaBaseStatementNode>() { new LuaScriptStatementNode("super.SetupHandlers(self)"), new LuaScriptStatementNode($"self:SetHandlerToggleTpl(self.panel.{luaUIPanel.HandlerRef.Name})"), new LuaScriptStatementNode("--self:EnsureCreateHandler(xxx, xxx)") }); } var onActiveFunc = new LuaFunctionNode("OnActive", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); var onDeActiveFunc = new LuaFunctionNode("OnDeActive", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); var updateFunc = new LuaFunctionNode("Update", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); var refreshFunc = new LuaFunctionNode("Refresh", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); var logoutFunc = new LuaFunctionNode("OnLogout", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); var reconnectedFunc = new LuaFunctionNode("OnReconnected", LuaMemberType.Local, new List <string>() { "roleData" }, new List <LuaBaseStatementNode>()); var showFunc = new LuaFunctionNode("Show", LuaMemberType.Local, null, new List <LuaBaseStatementNode>() { new LuaScriptStatementNode("super.Show(self)") }); var hideFunc = new LuaFunctionNode("Hide", LuaMemberType.Local, null, new List <LuaBaseStatementNode>() { new LuaScriptStatementNode("super.Hide(self)") }); var bindFunc = new LuaFunctionNode("BindEvents", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); //bindFunc.statementNodes.Add(new LuaScriptStatementNode("--dont override this function")); var unbindFunc = new LuaFunctionNode("UnBindEvents", LuaMemberType.Local, null, new List <LuaBaseStatementNode>()); //unbindFunc.statementNodes.Add(new LuaScriptStatementNode("--dont override this function")); Dictionary <string, int> comCountNumber = new Dictionary <string, int>(); List <string> unbindEvent = new List <string>(); for (int i = 0; i < luaUIPanel.ComRefs.Length; i++) { var comRef = luaUIPanel.ComRefs[i]; if (comRef.BindCom == null || string.IsNullOrEmpty(comRef.DataName) || !comRef.GenBindScript) { continue; } var modelName = comRef.ModelName ?? defultModelName; document.AddRequire(new LuaRequireNode($"Data/Model/{modelName}")); var eventNameFieldName = $"{modelName}.{comRef.DataName.ToUpper()}"; if (comRef.IsArray) { if (!comCountNumber.ContainsKey(comRef.Name)) { comCountNumber[comRef.Name] = 0; } comCountNumber[comRef.Name] = comCountNumber[comRef.Name] + 1; bindFunc.statementNodes.Add(new LuaScriptStatementNode( $"self:Bind(Data.{eventNameFieldName}, self.panel.{comRef.Name}[{comCountNumber[comRef.Name]}])")); } else { bindFunc.statementNodes.Add(new LuaScriptStatementNode($"self:Bind(Data.{eventNameFieldName}, self.panel.{comRef.Name})")); } if (!unbindEvent.Contains(eventNameFieldName)) { unbindFunc.statementNodes.Add(new LuaScriptStatementNode($"self:UnBind(Data.{eventNameFieldName})")); unbindEvent.Add(eventNameFieldName); } } document.AddFunction(ctorFunc); document.AddFunction(initFunc); if (setupHandlerFunc != null) { document.AddFunction(setupHandlerFunc); } document.AddFunction(unInitFunc); document.AddFunction(onActiveFunc); document.AddFunction(onDeActiveFunc); document.AddFunction(updateFunc); document.AddFunction(refreshFunc); document.AddFunction(logoutFunc); document.AddFunction(reconnectedFunc); document.AddFunction(showFunc); document.AddFunction(hideFunc); document.AddFunction(bindFunc); document.AddFunction(unbindFunc); MFileEx.SaveText(document.ToString(), LuaCtrlPath); }