private GenClassInfo AddRootClassTmp(Transform transform) { var ci = new GenClassInfo(); classInfos.Add(ci); RootStrategy.ProcessBefore(CreateProcessData(ci, transform)); return(ci); }
public static void InitNormalClassInfo(GenClassInfo ci, string name) { ci.notes.Add("尝试一下!!"); ci.usings.Add("UnityEngine"); ci.usings.Add("UnityEngine.UI"); ci.flags |= GenBindingFlags.Public; ci.name = name; }
UGUIProcessData CreateProcessData(GenClassInfo ci, Transform transform) { UGUIProcessData data = new UGUIProcessData(); data.BaseTransform = baseTransform; data.transform = transform; data.classInfo = ci; return(data); }
public static GenMethodInfo GetAwakeMethod(GenClassInfo ci) { string name = "Awake"; GenMethodInfo methodInfo; if (!ci.methods.TryGetValue(name, out methodInfo)) { methodInfo = new GenMethodInfo(); methodInfo.name = name; methodInfo.returnType = "void"; ci.methods.Add(name, methodInfo); } return(methodInfo); }
private GenClassInfo AddClassToTmp(Transform transform, UGUIProcessData data) { if (data == null) { throw new Exception("非root节点"); } var ci = new GenClassInfo(); classInfos.Add(ci); data.classInfo = ci; Strategy.ProcessBefore(data); return(ci); }
protected override void processAfterIn(UGUIProcessData data) { GenClassInfo genClassInfo = data.classInfo; UGUIGenUtil.AddErrMsgInResetMethod(genClassInfo); if (data.classInfo.name.Contains("GNode")) { genClassInfo.namespaceStr = "GNode"; } else { // genClassInfo.namespaceStr = UGUIini } }
public static GenMethodInfo AddOrGetResetMethod(GenClassInfo ci) { string name = "Reset"; GenMethodInfo mi; if (!ci.methods.TryGetValue(name, out mi)) { GenMethodInfo awakeGenMethod = new GenMethodInfo(); awakeGenMethod.name = name; awakeGenMethod.returnType = "void"; ci.methods.Add(name, awakeGenMethod); mi = ci.methods[name]; } return(mi); }
public List <GenClassInfo> Process(Transform transform) { ClearTmps(); baseTransform = transform; rootClassInfo = AddRootClassTmp(transform); new TransformRecurser(transform).Recurse((tr, order) => SingleProcess(tr, order, rootClassInfo)); RootStrategy.ProcessAfter(CreateProcessData(rootClassInfo, null)); foreach (var ci in classInfos) { if (ci != rootClassInfo) { Strategy.ProcessAfter(CreateProcessData(ci, null)); } } return(classInfos); }
public bool SingleProcess(Transform transform, string orderStr, GenClassInfo classInfo) { CodeStrategy strategy = null; if (classInfo == rootClassInfo) { strategy = RootStrategy; } else { strategy = Strategy; } var typeStrs = GetTypeStrs(transform.gameObject.name); var order = TransformRecurser.GetOrder(orderStr); if (typeStrs == null) { return(true); } bool continueRecurse = true; foreach (var typeStr in typeStrs) { var type = GetNodeType(typeStr); if (type == null) { throw new Exception("检查程序出错"); } var data = CreateProcessData(classInfo, transform); data.NodeTypeStr = typeStr; data.Nodetype = type; data.Orders = order; data.ComponentName = type.FullName; Debug.Log(data.ComponentName); strategy.Process(data); } return(continueRecurse); }
public static GenFieldInfo AddPublicField(GenClassInfo classInfo, string type, string name) { GenFieldInfo fieldInfo = new GenFieldInfo(); fieldInfo.flags |= GenBindingFlags.Public; fieldInfo.type = type; fieldInfo.name = name; for (int i = 0; i < classInfo.fields.Count; i++) { if (classInfo.fields[i].name == name) { Debug.LogError("当前类中包含相同的type" + type + "name" + name + "的字段"); return(null); } } classInfo.fields.Add(fieldInfo); return(fieldInfo); }
public static void AddErrMsgInResetMethod(GenClassInfo genClassInfo) { var awakeMethod = UGUIGenUtil.AddOrGetResetMethod(genClassInfo); List <GenFieldInfo> props = new List <GenFieldInfo>(); for (int i = 0; i < genClassInfo.fields.Count; i++) { if (genClassInfo.fields[i].type != "UIDele.Dele") { props.Add(genClassInfo.fields[i]); } } if (props.Count == 0) { return; } StringBuilder sb = new StringBuilder(); sb.Append("if("); bool first = true; foreach (var prop in props) { if (first) { first = false; } else { sb.Append("||"); } sb.Append(prop.name + "== null"); } sb.Append(")"); awakeMethod.codeLines.Add(sb.ToString()); awakeMethod.codeLines.Add(" Debug.LogError(\"节点有null,请重新生成代码\");"); }
private static GenClassInfo CreateInitedClassInfo(GenClassInfo ci, string name) { ci.parent = "UGUIRefNode"; UGUIGenUtil.InitNormalClassInfo(ci, name); return(ci); }
public abstract StringBuilder Build(GenClassInfo genClassInfo);
public override StringBuilder Build(GenClassInfo genClassInfo) { StringBuilder sb = new StringBuilder(); foreach (var note in genClassInfo.notes) { sb.Append(@"//"); sb.Append(note); sb.Append("\n"); } sb.Append("\n"); foreach (var us in genClassInfo.usings) { sb.Append(string.Format("using {0};", us)); sb.Append("\n"); } sb.Append("\n"); if (genClassInfo.namespaceStr != null && genClassInfo.namespaceStr.Length != 0) { sb.Append("namespace " + genClassInfo.namespaceStr); sb.Append("\n"); sb.Append("{"); sb.Append("\n"); } foreach (var attr in genClassInfo.attrs) { sb.Append("["); sb.Append(attr); sb.Append("]"); sb.Append("\n"); } if ((genClassInfo.flags & GenBindingFlags.Public) != 0) { sb.Append("public "); } if ((genClassInfo.flags & GenBindingFlags.Static) != 0) { sb.Append("static "); } sb.Append("class "); sb.Append(genClassInfo.name); if (genClassInfo.parent != null && genClassInfo.parent.Length != 0) { sb.Append(": "); sb.Append(genClassInfo.parent); } sb.Append("\n"); sb.Append("{"); foreach (var field in genClassInfo.fields) { sb.Append(tabs(1)); sb.Append(FieldFmt(field)); } sb.Append("\n"); foreach (var prop in genClassInfo.propertys) { sb.Append(tabs(1)); sb.Append(PropertyFmt(prop)); } sb.Append("\n"); foreach (var pair in genClassInfo.methods) { sb.Append("\n"); var method = pair.Value; sb.Append(tabs(1)); sb.Append(MethodHeadFmt(method)); sb.Append(tabs(1)); sb.Append("{"); foreach (var line in method.codeLines) { sb.Append(tabs(2)); sb.Append(line); } sb.Append(tabs(1)); sb.Append("}"); } sb.Append("\n"); sb.Append("}"); sb.Append("\n"); if (genClassInfo.namespaceStr != null && genClassInfo.namespaceStr.Length != 0) { sb.Append("}"); sb.Append("\n"); } return(sb); }
private void ClearTmps() { rootClassInfo = null; baseTransform = null; classInfos = new List <GenClassInfo>(); }