예제 #1
0
    private void SaveViewConfig(ViewRefData viewRefData)
    {
        if (viewRefData == null)
        {
            return;
        }
        string configPath = Path.Combine(CONFIG_ROOT, viewRefData.name + ".json");
        var    json       = LitJson.JsonMapper.ToJson(viewRefData, true);

        File.WriteAllText(configPath, json);
    }
예제 #2
0
    private void GenerateCSharpViewCode(ViewRefData viewRefData, Transform prefabRoot)
    {
        if (viewRefData == null)
        {
            return;
        }

        var memberWriter = new StringBuilder();

        memberWriter.Append("\r\n");
        memberWriter.AppendFormat("    public const string NAME = \"{0}\";\r\n\r\n", prefabRoot.name);
        foreach (var comInfo in viewRefData.components.Values)
        {
            memberWriter.AppendFormat("    private {0} _{1};\r\n", comInfo.fulleTypeName, comInfo.member);
            if (comInfo.comType == "GameObject")
            {
                memberWriter.AppendFormat(
                    @"    public {0} {1}
    {{
        get {{ return _{1} ?? (_{1} = root.Find(""{2}"").gameObject); }}
    }}
", comInfo.comType, comInfo.member, comInfo.path);
            }
            else if (comInfo.comType == "Transform")
            {
                memberWriter.AppendFormat(
                    @"    public {0} {1}
    {{
        get {{ return _{1} ?? (_{1} = root.Find(""{2}"")); }}
    }}
", comInfo.comType, comInfo.member, comInfo.path);
            }
            else
            {
                memberWriter.AppendFormat(
                    @"    public {0} {1}
    {{
        get {{ return _{1} ?? (_{1} = root.Find(""{2}"").GetComponent<{0}>()); }}
    }}
", comInfo.fulleTypeName, comInfo.member, comInfo.path);
            }
            memberWriter.Append("\r\n");
        }

        var codeWriter = new StringBuilder(CS_CODE_TEMPLATE);

        codeWriter.Replace("<className>", viewRefData.name);
        codeWriter.Replace("<member>", memberWriter.ToString());

        SaveViewConfig(viewRefData);
        File.WriteAllText(Path.Combine(CS_CODE_ROOT, viewRefData.name + ".cs"), codeWriter.ToString());
        this.ShowNotification(new GUIContent("生成ViewCode成功!"));
    }
예제 #3
0
    private void LoadViewConfig(GameObject prefab)
    {
        string viewName = prefab.name;

        if (_generatorSetttings.remap.ContainsKey(viewName))
        {
            viewName = _generatorSetttings.remap[viewName];
        }
        string configPath = Path.Combine(CONFIG_ROOT, viewName + ".json");

        if (File.Exists(configPath))
        {
            var rawText    = File.ReadAllText(configPath);
            var viewConfig = LitJson.JsonMapper.ToObject <ViewRefData>(rawText);
            _viewRefData = viewConfig ?? new ViewRefData(viewName);
        }
        else
        {
            _viewRefData = new ViewRefData(viewName);
        }
    }
예제 #4
0
    private void GenerateViewLuaCode(ViewRefData viewRefData, Transform prefabRoot)
    {
        if (viewRefData == null)
        {
            return;
        }

        var nameSpaceSet = new HashSet <string>();
        var refWriter    = new StringBuilder();

        foreach (var comInfo in viewRefData.components)
        {
            //兼容处理,以前旧的ViewConfig没有保存type.FullName
            string typeName = string.IsNullOrEmpty(comInfo.fulleTypeName) ? comInfo.comType : comInfo.fulleTypeName;
            if (!nameSpaceSet.Contains(typeName))
            {
                nameSpaceSet.Add(typeName);
                refWriter.AppendFormat("local {0} = CS.{1}\n", comInfo.comType, typeName);
            }
        }

        var memberWriter = new StringBuilder();

        foreach (var comInfo in viewRefData.components)
        {
            string className  = viewRefData.name;
            string getterName = comInfo.GetGetterName();
            if (comInfo.comType == "GameObject")
            {
                memberWriter.AppendFormat(@"function {0}:{1}()
    return self.root:Find('{2}').gameObject
end", className, getterName, comInfo.path);
            }
            else if (comInfo.comType == "Transform" || comInfo.comType == "RectTransform")
            {
                memberWriter.AppendFormat(@"function {0}:{1}()
    return self.root:Find('{2}')
end", className, getterName, comInfo.path);
            }
            else
            {
                if (string.IsNullOrEmpty(comInfo.path))
                {
                    memberWriter.AppendFormat(@"function {0}:{1}()
    return self.root:GetComponent(typeof({2}))
end", className, getterName, comInfo.comType);
                }
                else
                {
                    memberWriter.AppendFormat(@"function {0}:{1}()
    return self.root:Find('{2}'):GetComponent(typeof({3}))
end", className, getterName, comInfo.path, comInfo.comType);
                }
            }
            memberWriter.Append("\n\n");
        }

        var codeWriter = new StringBuilder(LUA_CODE_TEMPLATE);

        codeWriter.Replace("<localRef>", refWriter.ToString());
        codeWriter.Replace("<className>", viewRefData.name);
        codeWriter.Replace("<member>", memberWriter.ToString());

        SaveViewConfig(viewRefData);
        File.WriteAllText(Path.Combine(LUA_CODE_ROOT, viewRefData.GetFileName()), codeWriter.ToString());
        this.ShowNotification(new GUIContent("生成ViewCode成功!"));
        AssetDatabase.Refresh();
    }
예제 #5
0
 private void CleanUp()
 {
     _prefabRoot  = null;
     _viewRefData = null;
     _curComInfo  = null;
 }