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); }
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); }
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); }