Esempio n. 1
0
    void HandleLine_PrefabPath(string strLine, CLuaClass current)
    {
        if (current == null)
        {
            return;
        }

        if (GetNumberOfChars(strLine, '=') != 1)
        {
            return;
        }

        if (strLine.IndexOf("._PrefabPath") < 0)
        {
            return;
        }

        if (strLine.IndexOf("PATH.") < 0)
        {
            return;
        }

        int index = strLine.IndexOf("=");
        int end   = strLine.Length;

        string strValue = strLine.Substring(index + 1, end - index - 1);

        strValue = strValue.Trim(new char[] { ' ', '\t' });

        current.prefabPath = strValue.Replace("PATH.", "");
    }
Esempio n. 2
0
    void BuildLuaClass1(string filename, Dictionary <string, CLuaClass> luaClass)
    {
        string[] lines = File.ReadAllLines(filename);

        CLuaClass current  = null;
        bool      bComment = false;

        foreach (var line in lines)
        {
            if (line.Contains("--[["))
            {
                bComment = true;
            }

            if (line.Contains("]]"))
            {
                bComment = false;
            }

            if (bComment)
            {
                continue;
            }

            string strLine = line;

            {
                int idx = strLine.IndexOf("--"); //comment
                if (idx >= 0)
                {
                    strLine = strLine.Substring(0, idx);
                }
            }

            if (strLine.IndexOf("Lplus.Extend(") >= 0)
            {
                HandleLine_ClassExtend(filename, strLine, ref current);
            }
            else if (strLine.IndexOf("self:GetUIObject(") >= 0)
            {
                HandleLine_SelfUIObject(strLine, current);
            }
            else if (strLine.IndexOf("self._Parent:GetUIObject(") >= 0)
            {
                HandleLine_ParentUIObject(strLine, current);
            }
            else if (GetNumberOfChars(strLine, '=') == 1 &&
                     strLine.IndexOf("._PrefabPath") >= 0 &&
                     strLine.IndexOf("PATH.") >= 0)
            {
                HandleLine_PrefabPath(strLine, current);
            }
        }
    }
Esempio n. 3
0
    void HandleLine_ParentUIObject(string strLine, CLuaClass current)
    {
        if (current == null)
        {
            return;
        }

        int start, end;

        string str1 = "self._Parent:GetUIObject(";

        int idx = strLine.IndexOf(str1);

        if (idx < 0)
        {
            return;
        }
        idx += str1.Length;
        if (strLine[idx] == '\"' || strLine[idx] == '\'')
        {
            start = idx + 1;
        }
        else
        {
            return;
        }

        idx = strLine.IndexOf(")", idx);
        if (idx < 0)
        {
            return;
        }

        if (strLine[idx - 1] == '\"' || strLine[idx - 1] == '\'')
        {
            end = idx - 1;
        }
        else
        {
            return;
        }

        if (end > start)
        {
            string strObj = strLine.Substring(start, end - start);
            strObj = strObj.Trim(new char[] { ' ', '\t' });

            if (!strObj.Contains(".."))
            {
                current.uiParentOjbectSet.Add(strObj);
            }
        }
    }
Esempio n. 4
0
    public bool IsParentContains(CLuaClass luaClass, string strName)
    {
        CLuaClass parentClass = luaClass.parent;

        while (parentClass != null)
        {
            if (parentClass.strName == strName)
            {
                return(true);
            }
            parentClass = parentClass.parent;
        }

        return(false);
    }
Esempio n. 5
0
    void HandleLine_ClassExtend(string fileName, string strLine, ref CLuaClass current)
    {
        string str1 = "Lplus.Extend(";
        int    idx  = strLine.IndexOf(str1);

        if (idx < 0)
        {
            return;
        }
        idx += str1.Length;
        int start = idx;
        int end   = strLine.IndexOf(',', start);

        if (end < 0)
        {
            return;
        }

        if (strLine.IndexOf('\"', end) >= 0 && strLine.IndexOf("\")", end) >= 0)
        {
            //base
            string basename = strLine.Substring(start, end - start);
            basename = basename.Trim(new char[] { ' ', '\t' });

            CLuaClass baseClass = GetLuaClass(basename);
            if (baseClass == null)
            {
                baseClass         = AddLuaClass(basename);
                baseClass.strName = basename;
                baseClass.parent  = null;
            }

            //extend
            start = strLine.IndexOf("\"", end) + 1;
            end   = strLine.IndexOf("\")", start);

            string extname = strLine.Substring(start, end - start);
            extname = extname.Trim(new char[] { ' ', '\t' });

            CLuaClass luaClass = GetLuaClass(extname);
            if (luaClass == null)
            {
                luaClass          = AddLuaClass(extname);
                luaClass.fileName = fileName;
                luaClass.strName  = extname;
            }
            else if (string.IsNullOrEmpty(luaClass.strName))
            {
                luaClass.fileName = fileName;
                luaClass.strName  = extname;
            }
            luaClass.parent = baseClass;

            current = luaClass;
        }
        else if (strLine.IndexOf('\'', end) >= 0 && strLine.IndexOf("\')", end) >= 0)
        {
            //base
            string basename = strLine.Substring(start, end - start);
            basename = basename.Trim(new char[] { ' ', '\t' });

            CLuaClass baseClass = GetLuaClass(basename);
            if (baseClass == null)
            {
                baseClass         = AddLuaClass(basename);
                baseClass.strName = basename;
                baseClass.parent  = null;
            }

            //extend
            start = strLine.IndexOf("\'", end) + 1;
            end   = strLine.IndexOf("\')", start);

            string extname = strLine.Substring(start, end - start);
            extname = extname.Trim(new char[] { ' ', '\t' });

            CLuaClass luaClass = GetLuaClass(extname);
            if (luaClass == null)
            {
                luaClass          = AddLuaClass(extname);
                luaClass.fileName = fileName;
                luaClass.strName  = extname;
            }
            else if (string.IsNullOrEmpty(luaClass.strName))
            {
                luaClass.fileName = fileName;
                luaClass.strName  = extname;
            }
            luaClass.parent = baseClass;

            current = luaClass;
        }
    }
Esempio n. 6
0
    void HandleLine_ClassDefine(string fileName, string strLine, ref CLuaClass current)
    {
        string str1 = "Lplus.Class(\"";
        string str2 = "Lplus.Class(\'";

        int idx = strLine.IndexOf(str1);

        if (idx >= 0)
        {
            int start = idx + str1.Length;
            int end   = strLine.IndexOf("\")", start);

            if (end >= 0)
            {
                string name = strLine.Substring(start, end - start);
                name = name.Trim(new char[] { ' ', '\t' });

                CLuaClass luaClass = GetLuaClass(name);
                if (luaClass == null)
                {
                    luaClass          = AddLuaClass(name);
                    luaClass.strName  = name;
                    luaClass.fileName = fileName;
                    luaClass.parent   = null;
                }
                else if (string.IsNullOrEmpty(luaClass.strName))
                {
                    luaClass.strName  = name;
                    luaClass.fileName = fileName;
                }

                current = luaClass;
            }
        }
        else
        {
            idx = strLine.IndexOf(str2);
            if (idx >= 0)
            {
                int start = idx + str2.Length;
                int end   = strLine.IndexOf("')", start);

                if (end >= 0)
                {
                    string name = strLine.Substring(start, end - start);
                    name = name.Trim(new char[] { ' ', '\t' });

                    CLuaClass luaClass = GetLuaClass(name);
                    if (luaClass == null)
                    {
                        luaClass          = AddLuaClass(name);
                        luaClass.fileName = fileName;
                        luaClass.strName  = name;
                    }
                    else if (string.IsNullOrEmpty(luaClass.strName))
                    {
                        luaClass.strName  = name;
                        luaClass.fileName = fileName;
                    }

                    current = luaClass;
                }
            }
        }
    }
Esempio n. 7
0
    public string CheckUIParentClass(string className, CLuaClass luaClass)
    {
        string prefab = string.Empty;

        if (luaClass.uiParentOjbectSet.Count == 0)
        {
            return(prefab);
        }

        string parentClass = "";

        for (int i = 0; i < _ParentPairClass.Length; ++i)
        {
            if (i % 2 == 0)
            {
                if (_ParentPairClass[i] == className)
                {
                    parentClass = _ParentPairClass[i + 1];
                    break;
                }
            }
        }

        if (string.IsNullOrEmpty(parentClass))
        {
            return(prefab);
        }

        CLuaClass parentLuaClass = GetLuaClass(parentClass);

        //             if (parentLuaClass == null)
        //                 return;

        {
            string parentClassName = parentLuaClass.strName;

            string key = parentLuaClass.prefabPath;
            if (string.IsNullOrEmpty(key))
            {
                //_ErrorString += string.Format("UI没有配置prefab: {0}\n", className);
                return(prefab);
            }

            bool bError = false;
            if (!_ResPathUIPrefabMap.TryGetValue(key, out prefab))
            {
                if (!bError)
                {
                    _ErrorString += string.Format("parent class: {0}\n", parentClassName);
                    bError        = true;
                }
                _ErrorString += string.Format("\tUI缺失prefab! class: {0}, PATH: {1}\n", parentClassName, key);
                return(prefab);
            }

            prefab = _interfaceDir + prefab;
            Object asset = AssetBundleCheck.Instance.LoadAsset(prefab);
            if (asset == null)
            {
                if (!bError)
                {
                    _ErrorString += string.Format("class: {0} parent class: {1}\n", className, parentClassName);
                    bError        = true;
                }
                _ErrorString += string.Format("\tprefab asset 加载失败! class: {0}, PATH: {1}, prefab: {2}\n", parentClassName, key, prefab);
                return(prefab);
            }

            string objCfgKey = System.IO.Path.GetFileNameWithoutExtension(prefab);
            Dictionary <string, int> objCfgMap;
            if (!_ObjectCfgMap.TryGetValue(objCfgKey, out objCfgMap))
            {
                if (!bError)
                {
                    _ErrorString += string.Format("class: {0} parent class: {1}\n", className, parentClassName);
                    bError        = true;
                }
                _ErrorString += string.Format("\t找不到对应的ObjectCfg文件! class: {0}, parentClass: {1}, cfgPath: {2}\n", className, parentClassName, objCfgKey);
                return(prefab);
            }

            GameObject uiGameObject = GameObject.Instantiate(asset) as GameObject;
            var        holder       = uiGameObject.GetComponent <GUILinkHolder>();
            if (holder == null)
            {
                if (!bError)
                {
                    _ErrorString += string.Format("class: {0} parent class: {1}\n", className, parentClassName);
                    bError        = true;
                }
                _ErrorString += string.Format("\tprefab没有GUILinkHolder! class: {0}, parentClass: {1}, prefab: {2}\n", className, parentClassName, prefab);

                GameDataCheck.Instance.DestroyObjectX(uiGameObject);
                return(prefab);
            }

            foreach (string uiObj in luaClass.uiParentOjbectSet)
            {
                int id;
                if (!objCfgMap.TryGetValue(uiObj, out id))
                {
                    if (!bError)
                    {
                        _ErrorString += string.Format("class: {0} parent class: {1}\n", className, parentClassName);
                        bError        = true;
                    }
                    _ErrorString += string.Format("\t找不到ObjectCfg项! class: {0}, parentClass: {1}, uiObj: {2}\n", className, parentClassName, uiObj);
                    continue;
                }

                if (null == holder.GetUIObject(id))
                {
                    if (!bError)
                    {
                        _ErrorString += string.Format("class: {0} parent class: {1}\n", className, parentClassName);
                        bError        = true;
                    }

                    _ErrorString += string.Format("\tLinkHolder GetUIObject失败! class: {0}, parentClass: {1}, uiObj: {2}, id: {3}\n", className, parentClassName, uiObj, id);
                    continue;
                }
            }

            GameDataCheck.Instance.DestroyObjectX(uiGameObject);
        }
        return(prefab);
    }
Esempio n. 8
0
    public string CheckUIClass(string className, CLuaClass luaClass)
    {
        string prefab = string.Empty;

        if (!IsParentContains(luaClass, "CPanelBase"))
        {
            return(prefab);
        }

        string key = luaClass.prefabPath;

        if (string.IsNullOrEmpty(key))
        {
            //_ErrorString += string.Format("UI没有配置prefab: {0}\n", className);
            return(prefab);
        }

        bool bError = false;

        if (!_ResPathUIPrefabMap.TryGetValue(key, out prefab))
        {
            if (!bError)
            {
                _ErrorString += string.Format("class: {0}\n", className);
                bError        = true;
            }
            _ErrorString += string.Format("\tUI缺失prefab! class: {0}, PATH: {1}\n", className, key);
            return(prefab);
        }

        prefab = _interfaceDir + prefab;
        Object asset = AssetBundleCheck.Instance.LoadAsset(prefab);

        if (asset == null)
        {
            if (!bError)
            {
                _ErrorString += string.Format("class: {0}\n", className);
                bError        = true;
            }
            _ErrorString += string.Format("\tprefab asset 加载失败! class: {0}, PATH: {1}, prefab: {2}\n", className, key, prefab);
            return(prefab);
        }

        GameObject uiGameObject = GameObject.Instantiate(asset) as GameObject;

        if (uiGameObject.GetComponent <RectTransform>() == null)
        {
            if (!bError)
            {
                _ErrorString += string.Format("class: {0}\n", className);
                bError        = true;
            }
            _ErrorString += string.Format("\tprefab asset 没有RectTransform! class: {0}, PATH: {1}, prefab: {2}\n", className, key, prefab);
        }

        if (luaClass.uiOjbectSet.Count > 0)         //检查UIObject
        {
            string objCfgKey = System.IO.Path.GetFileNameWithoutExtension(prefab);
            Dictionary <string, int> objCfgMap;
            if (!_ObjectCfgMap.TryGetValue(objCfgKey, out objCfgMap))
            {
                if (!bError)
                {
                    _ErrorString += string.Format("class: {0}\n", className);
                    bError        = true;
                }
                _ErrorString += string.Format("\t找不到对应的ObjectCfg文件! class: {0}, cfgPath: {1}\n", className, objCfgKey);
                return(prefab);
            }

            var holder = uiGameObject.GetComponent <GUILinkHolder>();
            if (holder == null)
            {
                if (!bError)
                {
                    _ErrorString += string.Format("class: {0}\n", className);
                    bError        = true;
                }
                _ErrorString += string.Format("\tprefab没有GUILinkHolder! class: {0}, prefab: {1}\n", className, prefab);

                GameDataCheck.Instance.DestroyObjectX(uiGameObject);

                return(prefab);
            }

            foreach (string uiObj in luaClass.uiOjbectSet)
            {
                int id;
                if (!objCfgMap.TryGetValue(uiObj, out id))
                {
                    if (!bError)
                    {
                        _ErrorString += string.Format("class: {0}\n", className);
                        bError        = true;
                    }
                    _ErrorString += string.Format("\t找不到ObjectCfg项! class: {0}, uiObj: {1}\n", className, uiObj);
                    continue;
                }

                if (null == holder.GetUIObject(id))
                {
                    if (!bError)
                    {
                        _ErrorString += string.Format("class: {0}\n", className);
                        bError        = true;
                    }

                    _ErrorString += string.Format("\tLinkHolder GetUIObject失败! class: {0}, uiObj: {1}, id: {2}\n", className, uiObj, id);
                    continue;
                }
            }
        }
        GameDataCheck.Instance.DestroyObjectX(uiGameObject);

        return(prefab);
    }