public void GenScript(BaseUI ui) { rootGo = ui.gameObject; uiType = ui.GetType(); string viewClassName = uiType.Name + "View"; CodeGener gener = new CodeGener(UIView.uiViewNameSpace, viewClassName); gener.AddBaseType("UIView") .AddImport("ResetCore.UGUI"); rootGo.transform.DoToSelfAndAllChildren((tran) => { GameObject go = tran.gameObject; if (!go.name.StartsWith(UIView.genableSign)) { return; } string goName = go.name.Replace(UIView.genableSign, string.Empty); gener.AddMemberProperty(typeof(GameObject), UIView.goName + goName); var coms = go.GetComponents <Component>(); foreach (var com in coms) { Type comType = com.GetType(); if (!UIView.uiCompTypeList.Contains(comType)) { continue; } gener.AddMemberProperty(comType, UIView.comNameDict[comType] + goName); } }); gener.GenCSharp(PathEx.Combine(Application.dataPath, UIView.uiViewScriptPath)); }
//生成界面代码 public void GenViewScript(BaseUI ui) { rootGo = ui.gameObject; uiType = ui.GetType(); string viewClassName = uiType.Name + "View"; if (File.Exists(PathEx.Combine(Application.dataPath, UIView.uiViewScriptPath, viewClassName + ".cs"))) { if (!EditorUtility.DisplayDialog("提示", "已存在" + viewClassName + ",是否要覆盖?", "继续", "取消")) { return; } } CodeGener gener = new CodeGener(UIView.uiViewNameSpace, viewClassName); gener.AddBaseType(typeof(UIView).Name) .AddImport("ResetCore.UGUI"); rootGo.transform.DoToSelfAndAllChildren((tran) => { GameObject go = tran.gameObject; if (!go.name.StartsWith(UIView.genableSign)) { return; } string goName = go.name.Replace(UIView.genableSign, string.Empty); if (goName.Contains(splitGoNameAndProperty[0])) { goName = goName.Split(splitGoNameAndProperty, StringSplitOptions.RemoveEmptyEntries)[0]; } gener.AddMemberProperty(typeof(GameObject), UIView.goName + goName); var coms = go.GetComponents <Component>(); foreach (var com in coms) { Type comType = com.GetType(); if (!UIView.uiCompTypeList.Contains(comType)) { continue; } gener.AddMemberProperty(comType, UIView.comNameDict[comType] + goName); } }); gener.GenCSharp(PathEx.Combine(Application.dataPath, UIView.uiViewScriptPath)); }
public void GenCS(IDataReadable reader) { string className = reader.currentDataTypeName; CodeGener protobufBaseGener = new CodeGener(ProtobufData.nameSpace, className); protobufBaseGener.newClass.AddMemberCostomAttribute("ProtoBuf.ProtoContract"); protobufBaseGener.AddImport("System", "ProtoBuf"); List <string> comment = reader.GetComment(); protobufBaseGener .AddBaseType("ProtobufData<" + className + ">") .AddMemberField(typeof(string), "fileName", (member) => { member.AddFieldMemberInit("\"" + className + "\""); }, System.CodeDom.MemberAttributes.Static | System.CodeDom.MemberAttributes.Final | System.CodeDom.MemberAttributes.Public); reader.GetTitle().ForEach((i, title) => { string[] titleSplit = title.Split('|'); string varName = titleSplit[0]; string typeName = titleSplit[1]; protobufBaseGener.AddMemberProperty(typeName.GetTypeByString(), varName, (member) => { member.AddComment(comment[i], true); member.AddMemberCostomAttribute("ProtoBuf.ProtoMember", (i + 1).ToString()); }); }); PathEx.MakeFileDirectoryExist(PathConfig.GetLoaclGameDataClassPath(PathConfig.DataType.Protobuf)); protobufBaseGener.GenCSharp(PathConfig.GetLoaclGameDataClassPath(PathConfig.DataType.Protobuf)); }
//生成数据代码 public void GenModelScript(BaseUI ui) { rootGo = ui.gameObject; uiType = ui.GetType(); string modelClassName = uiType.Name + "Model"; if (File.Exists(PathEx.Combine(Application.dataPath, UIModel.uiModelScriptPath, modelClassName + ".cs"))) { if (!EditorUtility.DisplayDialog("提示", "已存在" + modelClassName + ",是否要覆盖?", "继续", "取消")) { return; } } CodeGener gener = new CodeGener(UIModel.uiModelNameSpace, modelClassName); gener.AddBaseType(typeof(UIModel).Name) .AddImport("ResetCore.UGUI") .AddImport("ResetCore.Event"); List <string> hasAddedProperty = new List <string>(); CodeConstructor constructor = new CodeConstructor(); constructor.Attributes = MemberAttributes.Public; rootGo.transform.DoToSelfAndAllChildren((tran) => { GameObject go = tran.gameObject; if (!go.name.StartsWith(UIModel.genableSign)) { return; } string goName = go.name.Replace(UIModel.genableSign, string.Empty); string propertyName; string typeName; if (!goName.Contains(splitGoNameAndProperty[0])) { return; } string[] tempstrs = goName.Split(splitGoNameAndProperty, StringSplitOptions.RemoveEmptyEntries); goName = tempstrs[0]; if (!tempstrs[1].Contains(splitComponentAndProperty[0])) { EditorUtility.WarnPrefab(go, "命名错误", go.name + "的格式不正确,标准格式为“g-View变量名@组件名->Model属性名:变量类型”", "好的"); return; } propertyName = tempstrs[1].Split(splitComponentAndProperty, StringSplitOptions.RemoveEmptyEntries)[1]; if (!propertyName.Contains(splitPropertyAndType.ToString())) { typeName = "EventProperty<string>"; } tempstrs = propertyName.Split(splitPropertyAndType, StringSplitOptions.RemoveEmptyEntries); propertyName = tempstrs[0]; typeName = "EventProperty<" + tempstrs[1] + ">"; if (!hasAddedProperty.Contains(propertyName)) { gener.AddMemberProperty(typeName, propertyName); hasAddedProperty.Add(propertyName); constructor.Statements.AddRange(new CodeStatement[] { new CodeCommentStatement("From " + go.name), new CodeSnippetStatement(propertyName + " = new " + typeName + "();") }); } }); gener.newClass.Members.Add(constructor); gener.GenCSharp(PathEx.Combine(Application.dataPath, UIModel.uiModelScriptPath)); }