/// <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);
    }
Exemple #2
0
    //生成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);
    }