static public string GetDeclareParameters(List <Node> nodes)
    {
        List <SubNode> subNodes = new List <SubNode>();

        foreach (Node node in nodes)
        {
            if (node is SubNode s)
            {
                subNodes.Add(s);
            }
        }
        string declareParameters = "";
        var    sortedSubNodes    = subNodes
                                   .Where(x => x != null)
                                   .OrderBy(x => x.GetType().ToString())
                                   .ToArray();

        foreach (SubNode node in sortedSubNodes)
        {
            if (!node.isInherited)
            {
                CodeTemplateParameterHolder holder = node.GetParameterHolder();
                string key    = node.GetKey();
                string source = CodeTemplateReader.GetTemplate("Declare", key);
                declareParameters += CodeTemplateInterpolator.Interpolate(source, holder);
            }
        }
        return(declareParameters);
    }
Exemplo n.º 2
0
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = base.GetParameterHolder();

        holder.SetParameter("count", count);
        return(holder);
    }
Exemplo n.º 3
0
    override public void Compile(string fileName, List <Node> nodes, string inheritTarget = "")
    {
        Debug.Log("Start Compile");
        if (string.IsNullOrEmpty(inheritTarget))
        {
            inheritTarget = inheritedClass;
        }


        CodeTemplateReader.Init(Path.Combine(Application.dataPath, codeTemplatePath));
        string classTemplate = CodeTemplateReader.GetTemplate("Base", "Class");

        string className   = FileNameToClassName(fileName);
        string inheritName = FileNameToClassName(inheritTarget);

        string declareParameters = "";

        declareParameters = BehaviourTreeCompilerCommon.GetDeclareParameters(nodes);

        string constructedTree = "";

        constructedTree = BehaviourTreeCompilerCommon.GetConstructedTree(nodes);


        //string code = string.Format(template, className, inheritName, declareParameters, constructTree);
        CodeTemplateParameterHolder templateParameter = new CodeTemplateParameterHolder();

        templateParameter.SetParameter("className", className);
        templateParameter.SetParameter("inheritName", inheritName);
        templateParameter.SetParameter("declareParameters", declareParameters);
        templateParameter.SetParameter("constructTree", constructedTree);
        string code = CodeTemplateInterpolator.Interpolate(classTemplate, templateParameter);

        BehaviourTreeCompilerCommon.SaveCode(className, code);
    }
Exemplo n.º 4
0
    public CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = new CodeTemplateParameterHolder();

        holder.SetParameter("NodeName", nodeName);

        return(holder);
    }
Exemplo n.º 5
0
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = base.GetParameterHolder();

        holder.SetParameter("waitSecond", waitSecond);

        return(holder);
    }
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = base.GetParameterHolder();

        holder.SetParameter("targetNodeName", targetNodeName);

        return(holder);
    }
    static public string Interpolate(string source, CodeTemplateParameterHolder parameterHolder)
    {
        char[]      charSource          = source.ToCharArray();
        List <char> buffer              = new List <char>();
        int         sourceLength        = charSource.Length;
        List <char> parameterNameBuffer = new List <char>();
        bool        isParameterFound    = false;

        for (int i = 0; i < sourceLength; i++)
        {
            if (!isParameterFound)
            {
                if (i <= sourceLength - 2)
                {
                    if (charSource[i] == '{' && charSource[i + 1] == '{')
                    {
                        isParameterFound = true;
                        parameterNameBuffer.Clear();
                        i++;
                    }
                    else
                    {
                        buffer.Add(charSource[i]);
                    }
                }
                else
                {
                    buffer.Add(charSource[i]);
                }
            }
            else
            {
                if (charSource[i] == '}' && charSource[i + 1] == '}')
                {
                    string parameterName  = new string(parameterNameBuffer.ToArray());
                    string parameterValue = parameterHolder.GetParameter(parameterName);

                    char[] charParameterValue       = parameterValue.ToCharArray();
                    int    charParameterValueLength = charParameterValue.Length;
                    for (int j = 0; j < charParameterValueLength; j++)
                    {
                        buffer.Add(charParameterValue[j]);
                    }

                    isParameterFound = false;
                    i++;
                }
                else
                {
                    parameterNameBuffer.Add(charSource[i]);
                }
            }
        }

        string ret = new string(buffer.ToArray());

        return(ret);
    }
Exemplo n.º 8
0
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = new CodeTemplateParameterHolder();

        holder.SetParameter("name", nodeName);
        holder.SetParameter("value", defaultValue.ToString().ToLower());

        return(holder);
    }
Exemplo n.º 9
0
    public CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = new CodeTemplateParameterHolder();

        holder.SetParameter("name", nodeName);
        holder.SetParameter("condition", condition);

        return(holder);
    }
Exemplo n.º 10
0
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = base.GetParameterHolder();

        holder.SetParameter("parameterName", parameterName);
        holder.SetParameter("value", value);

        return(holder);
    }
Exemplo n.º 11
0
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = new CodeTemplateParameterHolder();

        holder.SetParameter("name", nodeName);
        holder.SetParameter("eventName", eventName);

        return(holder);
    }
Exemplo n.º 12
0
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = new CodeTemplateParameterHolder();

        holder.SetParameter("name", nodeName);
        holder.SetParameter("parameterName", floatName);
        holder.SetParameter("value", value);

        return(holder);
    }
Exemplo n.º 13
0
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = new CodeTemplateParameterHolder();

        holder.SetParameter("name", nodeName);
        holder.SetParameter("isOverwrite", isOverwrite.ToString().ToLower());
        holder.SetParameter("isMultiple", isMultiple.ToString().ToLower());
        holder.SetParameter("targetNode", targetNode);
        holder.SetParameter("waitTime", waitTime);

        return(holder);
    }
Exemplo n.º 14
0
    public override CodeTemplateParameterHolder GetParameterHolder()
    {
        CodeTemplateParameterHolder holder = new CodeTemplateParameterHolder();

        holder.SetParameter("name", nodeName);
        string cancelTargetStr = "\"\"";

        foreach (var target in cancelTargets)
        {
            cancelTargetStr += ", \"" + target + "\"";
        }
        holder.SetParameter("cancelTarget", cancelTargetStr);
        holder.SetParameter("isAllCancel", isAllCancel.ToString().ToLower());

        return(holder);
    }
Exemplo n.º 15
0
    public override void Compile(string fileName, List <Node> nodes)
    {
        Debug.Log("Start Compile");
        List <SubNode> subNodes = new List <SubNode>();

        foreach (Node node in nodes)
        {
            if (node is SubNode s)
            {
                subNodes.Add(s);
            }
        }

        CodeTemplateReader.Init(Path.Combine(Application.dataPath, codeTemplatePath));

        string classTemplate = CodeTemplateReader.GetTemplate("Base", "Class");

        string className = FileNameToClassName(fileName);

        string declareParameters = "";

        declareParameters = BehaviourTreeCompilerCommon.GetDeclareParameters(nodes);

        string initParameters = "";
        var    sortedSubNodes = subNodes
                                .Where(x => x != null)
                                .OrderBy(x => x.GetType().ToString())
                                .ToArray();

        foreach (SubNode node in sortedSubNodes)
        {
            if (!(node is EventNode))
            {
                CodeTemplateParameterHolder holder = node.GetParameterHolder();
                string key        = node.GetKey();
                string initSource = CodeTemplateReader.GetTemplate("Init", "InitParameter");
                initParameters += CodeTemplateInterpolator.Interpolate(initSource, holder);
            }
        }

        string constructedTree = "";

        constructedTree = BehaviourTreeCompilerCommon.GetConstructedTree(nodes);

        //Init CalledFlag
        string initCalledFlag = "";
        var    exNodes        = nodes
                                .Where(x => x != null)
                                .Where(x => {
            return(x is ExecuteNode);
        })
                                .Cast <ExecuteNode>()
                                .ToArray();
        string initCalledFlagTemplate = CodeTemplateReader.GetTemplate("Test", "InitCalledFlag");

        foreach (var exNode in exNodes)
        {
            var parameterHolder = exNode.GetParameterHolder();
            initCalledFlag += CodeTemplateInterpolator.Interpolate(initCalledFlagTemplate, parameterHolder);
        }

        //Create TestCases
        string testCases        = "";
        string functionTemplate = CodeTemplateReader.GetTemplate("Test", "TestFunction");
        var    testRootNodes    = nodes
                                  .OfType <TestCaseRootNode>()
                                  .ToArray();

        foreach (var testRoot in testRootNodes)
        {
            string testProcess = "";
            var    current     = testRoot.GetOutputPort("output").GetConnections().First().node;
            while (current is ITestTreeGraphNode i)
            {
                string template        = CodeTemplateReader.GetTemplate("Test", i.GetKey());
                var    parameterHolder = i.GetParameterHolder();
                testProcess += CodeTemplateInterpolator.Interpolate(template, parameterHolder);

                var connections = current.GetOutputPort("output").GetConnections().ToArray();
                if (connections.Length == 0)
                {
                    break;
                }
                else
                {
                    current = connections[0].node;
                }
            }

            var testCaseParameterHolder = new CodeTemplateParameterHolder();
            testCaseParameterHolder.SetParameter("functionName", testRoot.GetNodeName());
            testCaseParameterHolder.SetParameter("testProcess", testProcess);

            testCases += CodeTemplateInterpolator.Interpolate(functionTemplate, testCaseParameterHolder);
        }

        //string code = string.Format(template, className, inheritName, declareParameters, constructTree);
        CodeTemplateParameterHolder templateParameter = new CodeTemplateParameterHolder();

        templateParameter.SetParameter("className", className);
        templateParameter.SetParameter("declareParameters", declareParameters);
        templateParameter.SetParameter("initParameters", initParameters);
        templateParameter.SetParameter("constructTree", constructedTree);
        templateParameter.SetParameter("initCalledFlag", initCalledFlag);
        templateParameter.SetParameter("testCases", testCases);
        string code = CodeTemplateInterpolator.Interpolate(classTemplate, templateParameter);

        //Save TestCode file
        BehaviourTreeCompilerCommon.SaveCode(className, code);
    }
    static public string GetConstructedTree(List <Node> nodes)
    {
        RootNode root = new RootNode();

        foreach (Node node in nodes)
        {
            if (node is RootNode r)
            {
                root = r;
            }
        }
        string constructedTree = "";
        CodeTemplateParameterHolder rootParameter = root.GetParameterHolder();
        string rootKey     = root.GetKey();
        string rootDeclare = CodeTemplateInterpolator.Interpolate(CodeTemplateReader.GetTemplate("Declare", rootKey), rootParameter);
        string rootInit    = CodeTemplateInterpolator.Interpolate(CodeTemplateReader.GetTemplate("Init", rootKey), rootParameter);

        constructedTree += rootDeclare + rootInit;
        var rootChild = root.GetOutputPort("output").GetConnection(0).node as ITreeGraphNode;

        foreach (Node node in nodes)
        {
            if (!(node is SubNode) && !(node is RootNode))
            {
                if (node is ITreeGraphNode i)
                {
                    CodeTemplateParameterHolder holder = i.GetParameterHolder();
                    string key    = i.GetKey();
                    string source = CodeTemplateReader.GetTemplate("Declare", key);
                    constructedTree += CodeTemplateInterpolator.Interpolate(source, holder) + "\n";
                }
            }
        }

        Node[] sortedNodes = nodes
                             .Where(x => x != null)
                             .OrderBy(x => x.position.y)
                             .ToArray();
        foreach (Node node in sortedNodes)
        {
            if (!(node is SubNode))
            {
                if (node is ITreeGraphNode i)
                {
                    if (!(node is RootNode))
                    {
                        CodeTemplateParameterHolder holder = i.GetParameterHolder();
                        string key    = i.GetKey();
                        string source = CodeTemplateReader.GetTemplate("Init", key);
                        constructedTree += CodeTemplateInterpolator.Interpolate(source, holder) + "\n";
                    }
                    var children = node.GetOutputPort("output").GetConnections()
                                   .OrderBy(x => x.node.position.y)
                                   .ToArray();
                    foreach (NodePort port in children)
                    {
                        Node child = port.node;
                        if (child is ITreeGraphNode i_child)
                        {
                            constructedTree += i.GetNodeName() + ".AddChild(" + i_child.GetNodeName() + ");\n";
                        }
                    }
                }
            }
        }

        return(constructedTree);
    }