Пример #1
0
    private GenClassInfo AddRootClassTmp(Transform transform)
    {
        var ci = new GenClassInfo();

        classInfos.Add(ci);
        RootStrategy.ProcessBefore(CreateProcessData(ci, transform));
        return(ci);
    }
Пример #2
0
    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;
    }
Пример #3
0
    UGUIProcessData CreateProcessData(GenClassInfo ci, Transform transform)
    {
        UGUIProcessData data = new UGUIProcessData();

        data.BaseTransform = baseTransform;
        data.transform     = transform;
        data.classInfo     = ci;
        return(data);
    }
Пример #4
0
    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);
    }
Пример #5
0
    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
        }
    }
Пример #7
0
    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);
    }
Пример #8
0
    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);
    }
Пример #9
0
    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);
    }
Пример #10
0
    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);
    }
Пример #11
0
    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);
 }
Пример #13
0
 public abstract StringBuilder Build(GenClassInfo genClassInfo);
Пример #14
0
    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);
    }
Пример #15
0
 private void ClearTmps()
 {
     rootClassInfo = null;
     baseTransform = null;
     classInfos    = new List <GenClassInfo>();
 }