Exemple #1
0
        public static string Compiled(ObjectMacro asset)
        {
            var output          = string.Empty;
            var isNamespaceNull = string.IsNullOrEmpty(asset.@namespace);
            var usingStatements = new List <string>();
            var inherits        = asset.baseType;
            var implements      = asset.interfaces;
            var typeName        = Patcher.TypeName(asset);
            var variables       = asset.variables;
            var scope           = asset.scope;
            var modifier        = asset.classModifier;
            var @namespace      = asset.@namespace;
            var name            = asset.name;
            var methods         = asset.methods;

            foreach (Method method in methods)
            {
                var units = method.graph.units;

                foreach (IUnit unit in units)
                {
                    var statements = unit.CodeGenerator().usingStatements;
                    foreach (string statement in statements)
                    {
                        AssemblyBuilder.UsingStatement(statement, usingStatements);
                    }
                }
            }

            AssemblyBuilder.UsingStatements(variables, usingStatements);
            AssemblyBuilder.UsingStatement(inherits.type, usingStatements);

            string typeDeclaration = ClassBuilder.Declaration(
                isNamespaceNull ? 0 : 1,
                scope,
                modifier,
                typeName,
                inherits.type.CSharpName(false) == "object" ? string.Empty : inherits.type.CSharpName(false),
                implements,
                string.Empty,
                string.Empty,
                variables,
                string.Empty,
                string.Empty,
                methods,
                false
                );

            output += AssemblyBuilder.GenerateUsingStatements(usingStatements);

            if (!isNamespaceNull)
            {
                output += AssemblyBuilder.Namespace(typeDeclaration, @namespace);
                return(output);
            }

            output += typeDeclaration;

            return(output);
        }
Exemple #2
0
        public static string CompiledEnum(ObjectMacro asset)
        {
            var output          = string.Empty;
            var @namespace      = asset.@namespace;
            var name            = asset.name;
            var scope           = asset.scope;
            var items           = asset.enumValues;
            var isNamespaceNull = string.IsNullOrEmpty(@namespace);
            var typeName        = Patcher.TypeName(asset);

            var typeDeclaration = EnumDeclaration(
                isNamespaceNull ? 0 : 1,
                scope,
                typeName,
                string.Empty,
                items,
                false
                );

            if (!isNamespaceNull)
            {
                output += AssemblyBuilder.Namespace(typeDeclaration, @namespace);
                return(output);
            }

            output += typeDeclaration;
            return(output);
        }
Exemple #3
0
        public static string Proxy(ObjectMacro asset)
        {
            var output          = string.Empty;
            var @namespace      = asset.@namespace;
            var isNamespaceNull = string.IsNullOrEmpty(@namespace);
            var usingStatements = new List <string>();
            var inherits        = asset.baseType;
            var implements      = asset.interfaces.ToListPooled();
            var typeName        = Patcher.TypeName(asset);
            var variables       = asset.variables;
            var scope           = asset.scope;
            var modifier        = asset.classModifier;
            var name            = asset.name;
            var methods         = asset.methods;

            AssemblyBuilder.UsingStatement("System", usingStatements);
            AssemblyBuilder.UsingStatement("System.Linq", usingStatements);
            AssemblyBuilder.UsingStatement("System.Collections.Generic", usingStatements);
            AssemblyBuilder.UsingStatement("UnityEngine", usingStatements);
            AssemblyBuilder.UsingStatement("Lasm.UAlive", usingStatements);
            AssemblyBuilder.UsingStatement("Ludiq", usingStatements);
            AssemblyBuilder.UsingStatements(variables, usingStatements);
            AssemblyBuilder.UsingStatement(inherits.type, usingStatements);


            implements.Add(new Interface()
            {
                type = typeof(ILiveObject)
            });

            //var dynamicVariables = CodeBuilder.Indent(isNamespaceNull ? 1 : 2) + "[Serialize]" + "\n";
            //dynamicVariables += CodeBuilder.Indent(isNamespaceNull ? 1 : 2) + "protected Dictionary<string, object> variables = new Dictionary<string, object>();";

            var objectMacro = CodeBuilder.Indent(isNamespaceNull ? 1 : 2) + "protected ObjectMacro macro;" + "\n";

            var methodMacros = string.Empty;

            foreach (Method method in methods)
            {
                methodMacros += CodeBuilder.Indent(isNamespaceNull ? 1 : 2) + "protected Method " + method.name + "_Method;" + "\n";
            }



            string typeDeclaration = ClassBuilder.Declaration(
                isNamespaceNull ? 0 : 1,
                scope,
                modifier,
                typeName,
                inherits.type.CSharpName(false) == "object" ? string.Empty : inherits.type.CSharpName(false),
                implements,
                string.Empty,
                string.Empty,
                variables,
                objectMacro + methodMacros,
                string.Empty,
                string.Empty,
                methods,
                true
                );

            output += AssemblyBuilder.GenerateUsingStatements(usingStatements);

            output += "\n";
            output += "#if UNITY_EDITOR";
            output += "\n";
            output += "using UnityEditor;";
            output += "\n";
            output += "#endif";
            output += "\n \n";

            if (!isNamespaceNull)
            {
                output += AssemblyBuilder.Namespace(typeDeclaration, @namespace);
                return(output);
            }

            output += typeDeclaration;

            return(output);
        }