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.", ""); }
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); } } }
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); } } }
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); }
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; } }
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; } } } }
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); }
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); }