You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
591 lines
21 KiB
591 lines
21 KiB
3 years ago
|
using UnityEditor;
|
||
|
using System.IO;
|
||
|
using System.Text;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using System.Text.RegularExpressions;
|
||
|
using UnityEngine;
|
||
|
|
||
|
using ET;
|
||
|
using NUnit.Framework;
|
||
|
|
||
|
public partial class UICodeSpawner
|
||
|
{
|
||
|
static public void SpawnEUICode(GameObject gameObject)
|
||
|
{
|
||
|
if (null == gameObject)
|
||
|
{
|
||
|
Debug.LogError("UICode Select GameObject is null!");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
string uiName = gameObject.name;
|
||
|
if (uiName.StartsWith(UIPanelPrefix))
|
||
|
{
|
||
|
Debug.LogWarning($"----------开始生成Dlg{uiName} 相关代码 ----------");
|
||
|
SpawnDlgCode(gameObject);
|
||
|
Debug.LogWarning($"生成Dlg{uiName} 完毕!!!");
|
||
|
return;
|
||
|
}
|
||
|
else if(uiName.StartsWith(CommonUIPrefix))
|
||
|
{
|
||
|
Debug.LogWarning($"-------- 开始生成子UI: {uiName} 相关代码 -------------");
|
||
|
SpawnSubUICode(gameObject);
|
||
|
Debug.LogWarning($"生成子UI: {uiName} 完毕!!!");
|
||
|
return;
|
||
|
}
|
||
|
else if (uiName.StartsWith(UIItemPrefix))
|
||
|
{
|
||
|
Debug.LogWarning($"-------- 开始生成滚动列表项: {uiName} 相关代码 -------------");
|
||
|
SpawnLoopItemCode(gameObject);
|
||
|
Debug.LogWarning($" 开始生成滚动列表项: {uiName} 完毕!!!");
|
||
|
return;
|
||
|
}
|
||
|
Debug.LogError($"选择的预设物不属于 Dlg, 子UI,滚动列表项,请检查 {uiName}!!!!!!");
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
Path2WidgetCachedDict?.Clear();
|
||
|
Path2WidgetCachedDict = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
static public void SpawnDlgCode(GameObject gameObject)
|
||
|
{
|
||
|
Path2WidgetCachedDict?.Clear();
|
||
|
Path2WidgetCachedDict = new Dictionary<string, List<Component>>();
|
||
|
|
||
|
FindAllWidgets(gameObject.transform, "");
|
||
|
|
||
|
SpawnCodeForDlg(gameObject);
|
||
|
SpawnCodeForDlgEventHandle(gameObject);
|
||
|
SpawnCodeForDlgModel(gameObject);
|
||
|
|
||
|
SpawnCodeForDlgBehaviour(gameObject);
|
||
|
SpawnCodeForDlgComponentBehaviour(gameObject);
|
||
|
|
||
|
AssetDatabase.Refresh();
|
||
|
}
|
||
|
|
||
|
static void SpawnCodeForDlg(GameObject gameObject)
|
||
|
{
|
||
|
string strDlgName = gameObject.name;
|
||
|
string strFilePath = Application.dataPath + "/../Codes/HotfixView/Demo/UI/" + strDlgName ;
|
||
|
|
||
|
|
||
|
if ( !System.IO.Directory.Exists(strFilePath) )
|
||
|
{
|
||
|
System.IO.Directory.CreateDirectory(strFilePath);
|
||
|
}
|
||
|
|
||
|
strFilePath = Application.dataPath + "/../Codes/HotfixView/Demo/UI/" + strDlgName + "/" + strDlgName + "System.cs";
|
||
|
if(System.IO.File.Exists(strFilePath))
|
||
|
{
|
||
|
Debug.LogError("已存在 " + strDlgName + "System.cs,将不会再次生成。");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
StreamWriter sw = new StreamWriter(strFilePath, false, Encoding.UTF8);
|
||
|
StringBuilder strBuilder = new StringBuilder();
|
||
|
strBuilder.AppendLine("using System.Collections;")
|
||
|
.AppendLine("using System.Collections.Generic;")
|
||
|
.AppendLine("using System;")
|
||
|
.AppendLine("using UnityEngine;")
|
||
|
.AppendLine("using UnityEngine.UI;\r\n");
|
||
|
|
||
|
strBuilder.AppendLine("namespace ET");
|
||
|
strBuilder.AppendLine("{");
|
||
|
|
||
|
strBuilder.AppendFormat("\tpublic static class {0}\r\n", strDlgName + "System");
|
||
|
strBuilder.AppendLine("\t{");
|
||
|
strBuilder.AppendLine("");
|
||
|
|
||
|
|
||
|
strBuilder.AppendFormat("\t\tpublic static void RegisterUIEvent(this {0} self)\n",strDlgName)
|
||
|
.AppendLine("\t\t{")
|
||
|
.AppendLine("\t\t ")
|
||
|
.AppendLine("\t\t}")
|
||
|
.AppendLine();
|
||
|
|
||
|
|
||
|
strBuilder.AppendFormat("\t\tpublic static void ShowWindow(this {0} self, Entity contextData = null)\n", strDlgName);
|
||
|
strBuilder.AppendLine("\t\t{");
|
||
|
|
||
|
strBuilder.AppendLine("\t\t}")
|
||
|
.AppendLine();
|
||
|
|
||
|
strBuilder.AppendLine("\t\t \r\n");
|
||
|
|
||
|
strBuilder.AppendLine("\t}");
|
||
|
strBuilder.AppendLine("}");
|
||
|
|
||
|
sw.Write(strBuilder);
|
||
|
sw.Flush();
|
||
|
sw.Close();
|
||
|
}
|
||
|
|
||
|
|
||
|
static void SpawnCodeForDlgEventHandle(GameObject gameObject)
|
||
|
{
|
||
|
string strDlgName = gameObject.name;
|
||
|
string strFilePath = Application.dataPath + "/../Codes/HotfixView/Demo/UI/" + strDlgName + "/Event" ;
|
||
|
|
||
|
|
||
|
if ( !System.IO.Directory.Exists(strFilePath) )
|
||
|
{
|
||
|
System.IO.Directory.CreateDirectory(strFilePath);
|
||
|
}
|
||
|
|
||
|
strFilePath = Application.dataPath + "/../Codes/HotfixView/Demo/UI/" + strDlgName + "/Event/" + strDlgName + "EventHandler.cs";
|
||
|
if(System.IO.File.Exists(strFilePath))
|
||
|
{
|
||
|
Debug.LogError("已存在 " + strDlgName + ".cs,将不会再次生成。");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
StreamWriter sw = new StreamWriter(strFilePath, false, Encoding.UTF8);
|
||
|
StringBuilder strBuilder = new StringBuilder();
|
||
|
|
||
|
strBuilder.AppendLine("namespace ET");
|
||
|
strBuilder.AppendLine("{");
|
||
|
|
||
|
strBuilder.AppendFormat("\t[AUIEvent(WindowID.WindowID_{0})]\n",strDlgName.Substring(3));
|
||
|
strBuilder.AppendFormat("\tpublic class {0}EventHandler : IAUIEventHandler\r\n", strDlgName);
|
||
|
strBuilder.AppendLine("\t{");
|
||
|
strBuilder.AppendLine("");
|
||
|
|
||
|
|
||
|
strBuilder.AppendLine("\t\tpublic void OnInitWindowCoreData(UIBaseWindow uiBaseWindow)")
|
||
|
.AppendLine("\t\t{");
|
||
|
|
||
|
strBuilder.AppendFormat("\t\t uiBaseWindow.WindowData.windowType = UIWindowType.Normal; \r\n");
|
||
|
|
||
|
strBuilder.AppendLine("\t\t}")
|
||
|
.AppendLine();
|
||
|
|
||
|
strBuilder.AppendLine("\t\tpublic void OnInitComponent(UIBaseWindow uiBaseWindow)")
|
||
|
.AppendLine("\t\t{");
|
||
|
|
||
|
strBuilder.AppendFormat("\t\t uiBaseWindow.AddComponent<{0}ViewComponent>(); \r\n",strDlgName);
|
||
|
strBuilder.AppendFormat("\t\t uiBaseWindow.AddComponent<{0}>(); \r\n",strDlgName);
|
||
|
|
||
|
strBuilder.AppendLine("\t\t}")
|
||
|
.AppendLine();
|
||
|
|
||
|
strBuilder.AppendLine("\t\tpublic void OnRegisterUIEvent(UIBaseWindow uiBaseWindow)")
|
||
|
.AppendLine("\t\t{");
|
||
|
|
||
|
strBuilder.AppendFormat("\t\t uiBaseWindow.GetComponent<{0}>().RegisterUIEvent(); \r\n",strDlgName);
|
||
|
|
||
|
strBuilder.AppendLine("\t\t}")
|
||
|
.AppendLine();
|
||
|
|
||
|
|
||
|
strBuilder.AppendLine("\t\tpublic void OnShowWindow(UIBaseWindow uiBaseWindow, Entity contextData = null)")
|
||
|
.AppendLine("\t\t{");
|
||
|
strBuilder.AppendFormat("\t\t uiBaseWindow.GetComponent<{0}>().ShowWindow(contextData); \r\n",strDlgName);
|
||
|
strBuilder.AppendLine("\t\t}")
|
||
|
.AppendLine();
|
||
|
|
||
|
|
||
|
strBuilder.AppendLine("\t\tpublic void OnHideWindow(UIBaseWindow uiBaseWindow)")
|
||
|
.AppendLine("\t\t{");
|
||
|
|
||
|
strBuilder.AppendLine("\t\t}")
|
||
|
.AppendLine();
|
||
|
|
||
|
|
||
|
strBuilder.AppendLine("\t\tpublic void BeforeUnload(UIBaseWindow uiBaseWindow)")
|
||
|
.AppendLine("\t\t{");
|
||
|
|
||
|
strBuilder.AppendLine("\t\t}")
|
||
|
.AppendLine();
|
||
|
|
||
|
strBuilder.AppendLine("\t}");
|
||
|
strBuilder.AppendLine("}");
|
||
|
|
||
|
sw.Write(strBuilder);
|
||
|
sw.Flush();
|
||
|
sw.Close();
|
||
|
}
|
||
|
|
||
|
|
||
|
static void SpawnCodeForDlgModel(GameObject gameObject)
|
||
|
{
|
||
|
string strDlgName = gameObject.name;
|
||
|
string strFilePath = Application.dataPath + "/../Codes/ModelView/Demo/UI/" + strDlgName ;
|
||
|
|
||
|
|
||
|
if ( !System.IO.Directory.Exists(strFilePath) )
|
||
|
{
|
||
|
System.IO.Directory.CreateDirectory(strFilePath);
|
||
|
}
|
||
|
|
||
|
strFilePath = Application.dataPath + "/../Codes/ModelView/Demo/UI/" + strDlgName + "/" + strDlgName + ".cs";
|
||
|
if(System.IO.File.Exists(strFilePath))
|
||
|
{
|
||
|
Debug.LogError("已存在 " + strDlgName + ".cs,将不会再次生成。");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
StreamWriter sw = new StreamWriter(strFilePath, false, Encoding.UTF8);
|
||
|
StringBuilder strBuilder = new StringBuilder();
|
||
|
|
||
|
strBuilder.AppendLine("namespace ET");
|
||
|
strBuilder.AppendLine("{");
|
||
|
|
||
|
|
||
|
strBuilder.AppendFormat("\tpublic class {0} :Entity,IAwake,IUILogic\r\n", strDlgName);
|
||
|
strBuilder.AppendLine("\t{");
|
||
|
strBuilder.AppendLine("");
|
||
|
|
||
|
strBuilder.AppendLine("\t\tpublic "+strDlgName+"ViewComponent View { get => this.Parent.GetComponent<"+ strDlgName +"ViewComponent>();} \r\n");
|
||
|
|
||
|
strBuilder.AppendLine("\t\t \r\n");
|
||
|
strBuilder.AppendLine("\t}");
|
||
|
strBuilder.AppendLine("}");
|
||
|
|
||
|
sw.Write(strBuilder);
|
||
|
sw.Flush();
|
||
|
sw.Close();
|
||
|
}
|
||
|
|
||
|
|
||
|
static void SpawnCodeForDlgBehaviour(GameObject gameObject)
|
||
|
{
|
||
|
if (null == gameObject)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
string strDlgName = gameObject.name ;
|
||
|
string strDlgComponentName = gameObject.name + "ViewComponent";
|
||
|
|
||
|
string strFilePath = Application.dataPath + "/../Codes/HotfixView/Demo/UIBehaviour/" + strDlgName;
|
||
|
|
||
|
if ( !System.IO.Directory.Exists(strFilePath) )
|
||
|
{
|
||
|
System.IO.Directory.CreateDirectory(strFilePath);
|
||
|
}
|
||
|
strFilePath = Application.dataPath + "/../Codes/HotfixView/Demo/UIBehaviour/" + strDlgName + "/" + strDlgComponentName + "System.cs";
|
||
|
|
||
|
StreamWriter sw = new StreamWriter(strFilePath, false, Encoding.UTF8);
|
||
|
|
||
|
|
||
|
StringBuilder strBuilder = new StringBuilder();
|
||
|
strBuilder.AppendLine()
|
||
|
.AppendLine("using UnityEngine;");
|
||
|
strBuilder.AppendLine("using UnityEngine.UI;");
|
||
|
strBuilder.AppendLine("namespace ET");
|
||
|
strBuilder.AppendLine("{");
|
||
|
strBuilder.AppendLine("\t[ObjectSystem]");
|
||
|
strBuilder.AppendFormat("\tpublic class {0}AwakeSystem : AwakeSystem<{1}> \r\n", strDlgComponentName, strDlgComponentName);
|
||
|
strBuilder.AppendLine("\t{");
|
||
|
strBuilder.AppendFormat("\t\tpublic override void Awake({0} self)\n",strDlgComponentName);
|
||
|
strBuilder.AppendLine("\t\t{");
|
||
|
strBuilder.AppendLine("\t\t\tself.uiTransform = self.GetParent<UIBaseWindow>().uiTransform;");
|
||
|
strBuilder.AppendLine("\t\t}");
|
||
|
strBuilder.AppendLine("\t}");
|
||
|
strBuilder.AppendLine("\n");
|
||
|
|
||
|
|
||
|
strBuilder.AppendLine("\t[ObjectSystem]");
|
||
|
strBuilder.AppendFormat("\tpublic class {0}DestroySystem : DestroySystem<{1}> \r\n", strDlgComponentName, strDlgComponentName);
|
||
|
strBuilder.AppendLine("\t{");
|
||
|
strBuilder.AppendFormat("\t\tpublic override void Destroy({0} self)",strDlgComponentName);
|
||
|
strBuilder.AppendLine("\n\t\t{");
|
||
|
strBuilder.AppendFormat("\t\t\tself.DestroyWidget();\r\n");
|
||
|
strBuilder.AppendLine("\t\t}");
|
||
|
strBuilder.AppendLine("\t}");
|
||
|
strBuilder.AppendLine("}");
|
||
|
sw.Write(strBuilder);
|
||
|
sw.Flush();
|
||
|
sw.Close();
|
||
|
}
|
||
|
|
||
|
static void SpawnCodeForDlgComponentBehaviour(GameObject gameObject)
|
||
|
{
|
||
|
if (null == gameObject)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
string strDlgName = gameObject.name ;
|
||
|
string strDlgComponentName = gameObject.name + "ViewComponent";
|
||
|
|
||
|
|
||
|
string strFilePath = Application.dataPath + "/../Codes/ModelView/Demo/UIBehaviour/" + strDlgName;
|
||
|
if ( !System.IO.Directory.Exists(strFilePath) )
|
||
|
{
|
||
|
System.IO.Directory.CreateDirectory(strFilePath);
|
||
|
}
|
||
|
strFilePath = Application.dataPath + "/../Codes/ModelView/Demo/UIBehaviour/" + strDlgName + "/" + strDlgComponentName + ".cs";
|
||
|
StreamWriter sw = new StreamWriter(strFilePath, false, Encoding.UTF8);
|
||
|
StringBuilder strBuilder = new StringBuilder();
|
||
|
strBuilder.AppendLine()
|
||
|
.AppendLine("using UnityEngine;");
|
||
|
strBuilder.AppendLine("using UnityEngine.UI;");
|
||
|
strBuilder.AppendLine("namespace ET");
|
||
|
strBuilder.AppendLine("{");
|
||
|
strBuilder.AppendFormat("\tpublic class {0} : Entity,IAwake,IDestroy \r\n", strDlgComponentName)
|
||
|
.AppendLine("\t{");
|
||
|
|
||
|
CreateWidgetBindCode(ref strBuilder, gameObject.transform);
|
||
|
|
||
|
CreateDestroyWidgetCode(ref strBuilder);
|
||
|
|
||
|
CreateDeclareCode(ref strBuilder);
|
||
|
strBuilder.AppendFormat("\t\tpublic Transform uiTransform = null;\r\n");
|
||
|
strBuilder.AppendLine("\t}");
|
||
|
strBuilder.AppendLine("}");
|
||
|
|
||
|
sw.Write(strBuilder);
|
||
|
sw.Flush();
|
||
|
sw.Close();
|
||
|
}
|
||
|
|
||
|
|
||
|
public static void CreateDestroyWidgetCode( ref StringBuilder strBuilder)
|
||
|
{
|
||
|
strBuilder.AppendFormat("\t\tpublic void DestroyWidget()");
|
||
|
strBuilder.AppendLine("\n\t\t{");
|
||
|
CreateDlgWidgetDisposeCode(ref strBuilder);
|
||
|
strBuilder.AppendFormat("\t\t\tthis.uiTransform = null;\r\n");
|
||
|
strBuilder.AppendLine("\t\t}\n");
|
||
|
}
|
||
|
|
||
|
|
||
|
public static void CreateDlgWidgetDisposeCode(ref StringBuilder strBuilder,bool isSelf = false)
|
||
|
{
|
||
|
string pointStr = isSelf ? "self" : "this";
|
||
|
foreach (KeyValuePair<string, List<Component>> pair in Path2WidgetCachedDict)
|
||
|
{
|
||
|
foreach (var info in pair.Value)
|
||
|
{
|
||
|
Component widget = info;
|
||
|
string strClassType = widget.GetType().ToString();
|
||
|
|
||
|
if (pair.Key.StartsWith(CommonUIPrefix))
|
||
|
{
|
||
|
strBuilder.AppendFormat("\t\t {0}.m_{1}?.Dispose();\r\n", pointStr,pair.Key.ToLower());
|
||
|
strBuilder.AppendFormat("\t\t {0}.m_{1} = null;\r\n", pointStr,pair.Key.ToLower());
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
string widgetName = widget.name + strClassType.Split('.').ToList().Last();
|
||
|
strBuilder.AppendFormat("\t\t {0}.m_{1} = null;\r\n", pointStr,widgetName);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
public static void CreateWidgetBindCode(ref StringBuilder strBuilder, Transform transRoot)
|
||
|
{
|
||
|
foreach (KeyValuePair<string, List<Component>> pair in Path2WidgetCachedDict)
|
||
|
{
|
||
|
foreach (var info in pair.Value)
|
||
|
{
|
||
|
Component widget = info;
|
||
|
string strPath = GetWidgetPath(widget.transform, transRoot);
|
||
|
string strClassType = widget.GetType().ToString();
|
||
|
string strInterfaceType = strClassType;
|
||
|
|
||
|
if (pair.Key.StartsWith(CommonUIPrefix))
|
||
|
{
|
||
|
GetSubUIBaseWindowCode(ref strBuilder, pair.Key,strPath);
|
||
|
continue;
|
||
|
}
|
||
|
string widgetName = widget.name + strClassType.Split('.').ToList().Last();
|
||
|
|
||
|
|
||
|
strBuilder.AppendFormat(" public {0} {1}\r\n", strInterfaceType, widgetName);
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendLine(" get");
|
||
|
strBuilder.AppendLine(" {");
|
||
|
|
||
|
strBuilder.AppendLine(" if (this.uiTransform == null)");
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendLine(" Log.Error(\"uiTransform is null.\");");
|
||
|
strBuilder.AppendLine(" return null;");
|
||
|
strBuilder.AppendLine(" }");
|
||
|
|
||
|
if (transRoot.gameObject.name.StartsWith(UIItemPrefix))
|
||
|
{
|
||
|
strBuilder.AppendLine(" if (this.isCacheNode)");
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendFormat(" if( this.m_{0} == null )\n" , widgetName);
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendFormat(" this.m_{0} = UIFindHelper.FindDeepChild<{2}>(this.uiTransform.gameObject,\"{1}\");\r\n", widgetName, strPath, strInterfaceType);
|
||
|
strBuilder.AppendLine(" }");
|
||
|
strBuilder.AppendFormat(" return this.m_{0};\n" , widgetName);
|
||
|
strBuilder.AppendLine(" }");
|
||
|
strBuilder.AppendLine(" else");
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendFormat(" return UIFindHelper.FindDeepChild<{2}>(this.uiTransform.gameObject,\"{1}\");\r\n", widgetName, strPath, strInterfaceType);
|
||
|
strBuilder.AppendLine(" }");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
strBuilder.AppendFormat(" if( this.m_{0} == null )\n" , widgetName);
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendFormat(" this.m_{0} = UIFindHelper.FindDeepChild<{2}>(this.uiTransform.gameObject,\"{1}\");\r\n", widgetName, strPath, strInterfaceType);
|
||
|
strBuilder.AppendLine(" }");
|
||
|
strBuilder.AppendFormat(" return this.m_{0};\n" , widgetName);
|
||
|
}
|
||
|
|
||
|
strBuilder.AppendLine(" }");
|
||
|
strBuilder.AppendLine(" }\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void CreateDeclareCode(ref StringBuilder strBuilder)
|
||
|
{
|
||
|
foreach (KeyValuePair<string,List<Component> > pair in Path2WidgetCachedDict)
|
||
|
{
|
||
|
foreach (var info in pair.Value)
|
||
|
{
|
||
|
Component widget = info;
|
||
|
string strClassType = widget.GetType().ToString();
|
||
|
|
||
|
if ( pair.Key.StartsWith(CommonUIPrefix))
|
||
|
{
|
||
|
string subUIClassType = Regex.Replace(pair.Key, @"\d", "");
|
||
|
strBuilder.AppendFormat("\t\tprivate {0} m_{1} = null;\r\n", subUIClassType, pair.Key.ToLower());
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
string widgetName = widget.name + strClassType.Split('.').ToList().Last();
|
||
|
strBuilder.AppendFormat("\t\tprivate {0} m_{1} = null;\r\n", strClassType, widgetName);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void FindAllWidgets(Transform trans, string strPath)
|
||
|
{
|
||
|
if (null == trans)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
for (int nIndex= 0; nIndex < trans.childCount; ++nIndex)
|
||
|
{
|
||
|
Transform child = trans.GetChild(nIndex);
|
||
|
string strTemp = strPath+"/"+child.name;
|
||
|
|
||
|
|
||
|
bool isSubUI = child.name.StartsWith(CommonUIPrefix);
|
||
|
if (isSubUI || child.name.StartsWith(UIGameObjectPrefix))
|
||
|
{
|
||
|
List<Component> rectTransfomrComponents = new List<Component>();
|
||
|
rectTransfomrComponents.Add(child.GetComponent<RectTransform>());
|
||
|
Path2WidgetCachedDict.Add(child.name,rectTransfomrComponents);
|
||
|
}
|
||
|
else if (child.name.StartsWith(UIWidgetPrefix))
|
||
|
{
|
||
|
foreach (var uiComponent in WidgetInterfaceList)
|
||
|
{
|
||
|
Component component = child.GetComponent(uiComponent);
|
||
|
if (null == component)
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if ( Path2WidgetCachedDict.ContainsKey(child.name) )
|
||
|
{
|
||
|
Path2WidgetCachedDict[child.name].Add(component);
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
List<Component> componentsList = new List<Component>();
|
||
|
componentsList.Add(component);
|
||
|
Path2WidgetCachedDict.Add(child.name, componentsList);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (isSubUI)
|
||
|
{
|
||
|
Debug.Log($"遇到子UI:{child.name},不生成子UI项代码");
|
||
|
continue;
|
||
|
}
|
||
|
FindAllWidgets(child, strTemp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static string GetWidgetPath(Transform obj, Transform root)
|
||
|
{
|
||
|
string path = obj.name;
|
||
|
|
||
|
while (obj.parent != null && obj.parent != root)
|
||
|
{
|
||
|
obj = obj.transform.parent;
|
||
|
path = obj.name + "/" + path;
|
||
|
}
|
||
|
return path;
|
||
|
}
|
||
|
|
||
|
|
||
|
static void GetSubUIBaseWindowCode(ref StringBuilder strBuilder,string widget,string strPath)
|
||
|
{
|
||
|
|
||
|
string subUIClassType = Regex.Replace(widget, @"\d", "");
|
||
|
|
||
|
strBuilder.AppendFormat(" public {0} {1}\r\n", subUIClassType, widget );
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendLine(" get");
|
||
|
strBuilder.AppendLine(" {");
|
||
|
|
||
|
strBuilder.AppendLine(" if (this.uiTransform == null)");
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendLine(" Log.Error(\"uiTransform is null.\");");
|
||
|
strBuilder.AppendLine(" return null;");
|
||
|
strBuilder.AppendLine(" }");
|
||
|
|
||
|
strBuilder.AppendFormat(" if( this.m_{0} == null )\n" , widget.ToLower());
|
||
|
strBuilder.AppendLine(" {");
|
||
|
strBuilder.AppendFormat(" Transform subTrans = UIFindHelper.FindDeepChild<Transform>(this.uiTransform.gameObject,\"{0}\");\r\n", strPath);
|
||
|
strBuilder.AppendFormat(" this.m_{0} = this.AddChild<{1},Transform>(subTrans);\r\n", widget.ToLower(),subUIClassType);
|
||
|
strBuilder.AppendLine(" }");
|
||
|
strBuilder.AppendFormat(" return this.m_{0};\n" , widget.ToLower());
|
||
|
strBuilder.AppendLine(" }");
|
||
|
|
||
|
|
||
|
|
||
|
strBuilder.AppendLine(" }\n");
|
||
|
}
|
||
|
|
||
|
|
||
|
static UICodeSpawner()
|
||
|
{
|
||
|
WidgetInterfaceList = new List<string>();
|
||
|
WidgetInterfaceList.Add("Button");
|
||
|
WidgetInterfaceList.Add( "Text");
|
||
|
WidgetInterfaceList.Add("Input");
|
||
|
WidgetInterfaceList.Add("InputField");
|
||
|
WidgetInterfaceList.Add( "Scrollbar");
|
||
|
WidgetInterfaceList.Add("ToggleGroup");
|
||
|
WidgetInterfaceList.Add("Toggle");
|
||
|
WidgetInterfaceList.Add("Dropdown");
|
||
|
WidgetInterfaceList.Add("Slider");
|
||
|
WidgetInterfaceList.Add("ScrollRect");
|
||
|
WidgetInterfaceList.Add( "Image");
|
||
|
WidgetInterfaceList.Add("RawImage");
|
||
|
WidgetInterfaceList.Add("Canvas");
|
||
|
WidgetInterfaceList.Add("UIWarpContent");
|
||
|
WidgetInterfaceList.Add("LoopVerticalScrollRect");
|
||
|
WidgetInterfaceList.Add("LoopHorizontalScrollRect");
|
||
|
}
|
||
|
|
||
|
private static Dictionary<string, List<Component> > Path2WidgetCachedDict =null;
|
||
|
private static List<string> WidgetInterfaceList = null;
|
||
|
private const string CommonUIPrefix = "ES";
|
||
|
private const string UIPanelPrefix = "Dlg";
|
||
|
private const string UIWidgetPrefix = "E";
|
||
|
private const string UIGameObjectPrefix = "EG";
|
||
|
private const string UIItemPrefix = "Item";
|
||
|
}
|
||
|
|