Beispiel #1
0
    public void TestCode()
    {
        var stringValueNode1 = new StringValueNode();
        var stringValueNode2 = new StringValueNode();
        var printNode1       = new DebugLogNode();
        var printNode2       = new DebugLogNode();
        var endNode1         = new TEMP_SemicolonNode();
        var endNode2         = new TEMP_SemicolonNode();
        var startEventNode   = new StartEventNode();
        var updateEventNode  = new UpdateEventNode();
        var textValueNode    = new TextValueNode();
        var classNode        = new ClassNode();

        stringValueNode1.SetValue("Start method called");
        stringValueNode2.SetValue("Update method called");
        printNode1.AddConnection(0, stringValueNode1.Outputs[0]);
        printNode2.AddConnection(0, stringValueNode1.Outputs[0]);
        endNode1.AddConnection(0, printNode1.Outputs[0]);
        endNode2.AddConnection(0, printNode2.Outputs[0]);
        startEventNode.AddChildNode(endNode1);
        startEventNode.AddChildNode(printNode1);
        startEventNode.AddChildNode(stringValueNode1);
        updateEventNode.AddChildNode(endNode2);
        updateEventNode.AddChildNode(printNode2);

        textValueNode.SetValue("ExampleClass");
        classNode.AddConnection(0, textValueNode.Outputs[0]);
        classNode.AddChildNode(startEventNode);
        classNode.AddChildNode(updateEventNode);

        printNode2.RemoveConnection(0, stringValueNode1.Outputs[0]);
        printNode2.AddConnection(0, stringValueNode2.Outputs[0]);
        updateEventNode.AddChildNode(stringValueNode2);

        var code = classNode.GetCode(0);

        print(code);
        var provider   = CodeDomProvider.CreateProvider("CSharp");
        var assemblies = AppDomain.CurrentDomain
                         .GetAssemblies()
                         .Where(a => !a.IsDynamic)
                         .Select(a => a.Location);
        var parameters = new CompilerParameters {
            GenerateExecutable = false
        };

        parameters.ReferencedAssemblies.AddRange(assemblies.ToArray());
        var results = provider.CompileAssemblyFromSource(parameters, code);

        if (results.Errors.Count > 0)
        {
            foreach (CompilerError compErr in results.Errors)
            {
                Debug.LogError($"Error {compErr.ErrorNumber} => \"{compErr.ErrorText} at line number {compErr.Line}\"\r\n");
            }
        }
    }