CreateNode() публичный статический Метод

public static CreateNode ( Type, nodeType, AiBehaviour, blackboard ) : ANode,
nodeType Type,
blackboard AiBehaviour,
Результат ANode,
Пример #1
0
    public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context)
    {
        var worldMousePosition = window.rootVisualElement.ChangeCoordinatesTo(window.rootVisualElement.parent,
                                                                              context.screenMousePosition - window.position.position);
        var localMousePosition = graphView.contentViewContainer.WorldToLocal(worldMousePosition);

        BaseNode       node = (BaseNode)SearchTreeEntry.userData;
        ActionNodeData and  = new ActionNodeData
        {
            Position      = new Rect(localMousePosition, graphView.DefaultNodeSize),
            GUID          = Guid.NewGuid().ToString(),
            OutputPortIDs = new List <string>(),
            NodeType      = node.NodeType.AssemblyQualifiedName
        };
        BaseNode temp = NodeFactory.CreateNode(and);

        temp?.Draw(graphView);

        //if tempEdge is not null, this means that the search window
        if (graphView.TempEdge != null && temp != null)
        {
            //get the inpût port of the new node
            var tempInput = graphView.GetInputPorts(temp).ToList();

            if (tempInput.Count == 0)
            {
                graphView.TempPort = null;
                graphView.TempEdge = null;

                return(true);
            }
            var inputPort = tempInput.First();

            //if the output port is single and already connected. Must disconnect it.
            if (graphView.TempPort.capacity == Port.Capacity.Single && graphView.TempPort.connected)
            {
                var edge = graphView.edges.ToList().Where(x => x.output == graphView.TempPort);
                if (edge.Any())
                {
                    var e = edge.First();
                    e.input.Disconnect(e);
                    e.output.Disconnect(e);
                    graphView.RemoveElement(e);
                }
            }
            var tempEdge = new Edge
            {
                input  = inputPort,
                output = graphView.TempPort
            };
            inputPort.Connect(tempEdge);
            graphView.TempPort.Connect(tempEdge);
            graphView.Add(tempEdge);

            graphView.TempPort = null;
            graphView.TempEdge = null;

            return(true);
        }

        //Return false doesn't close window
        return(true);
    }
        private ExpectResult CreateNode()
        {
            var results    = new List <IndexedItem <ExpectResult> >(BnfRules.Count);
            var checkpoint = LexemeSource.SetCheckpoint();

            for (var i = 0; i < BnfRules.Count; i++)
            {
                Repetition rep;
                if (_repetitions.Any() && (rep = _repetitions.FirstOrDefault(r => r.StartIndex == i)) != null)
                {
                    results.AddRange(Repetition(rep));
                    i = rep.EndIndex;
                    continue;
                }

                var temp   = _repetitionSucceeded;
                var result = BnfRules[i].Expect();
                _repetitionSucceeded = temp;

                if (!result.Success)
                {
                    LexemeSource.RevertCheckPoint(checkpoint);

                    return(new ExpectResult(false));
                }

                if (MetaData.ParamGroups.SelectMany(p => p.Params).Contains(i))
                {
                    results.Add(new IndexedItem <ExpectResult>
                    {
                        Index = i,
                        Item  = result
                    });
                }
            }

            if (_repetitions.Any() && _repetitionSucceeded && MetaData.IsLeftRecursion) //jei yra repetition, ir repetition kazka rado, ir pazymeta kairioji rekursija
            {
                return(new ExpectResult(true, LeftRecursion(results)));
            }
            if (_repetitions.Any() && !_repetitionSucceeded && MetaData.IsLeftRecursion) //jei yra repetition, ir repetition nieko nerado, ir pazymeta kairioji rekursija
            {
                return(results.First().Item);
            }

            var paramGroups = new List <List <Node> >(MetaData.ParamGroups.Count);

            for (var i = 0; i < MetaData.ParamGroups.Count; i++)
            {
                paramGroups.Add(new List <Node>());
            }

            foreach (var r in results)
            {
                for (var i = 0; i < MetaData.ParamGroups.Count; i++)
                {
                    if (MetaData.ParamGroups[i].Params.Contains(r.Index))
                    {
                        paramGroups[i].Add(r.Item.Node);
                        break;
                    }
                }
            }

            Node newNode;

            if (!_repetitions.Any() && paramGroups.All(p => p.Count <= 1))
            {
                var parameters = paramGroups.Select(p => p.FirstOrDefault()).ToList();

                if (parameters.Count == 2 && parameters[1] == null && MetaData.Class == "Assign")
                {
                }
                newNode = NodeFactory.CreateNode(MetaData.Class, parameters);
            }
            else
            {
                newNode = NodeFactory.CreateNode(MetaData.Class, paramGroups);
            }

            return(new ExpectResult(true, newNode));
        }
Пример #3
0
 private void CreateSpearatorNodes(ASTNodeList newNodes)
 {
     newNodes.Add(NodeFactory.CreateNode("||"));
     newNodes.Add(NodeFactory.CreateNode("'-'"));
     newNodes.Add(NodeFactory.CreateNode("||"));
 }
Пример #4
0
        public virtual INode Parse(Token token)
        {
            var currentNode = NodeFactory.CreateNode(AttributeName);

            parser.NextToken();
            while (parser.CurrentToken.Keyword != KeywordToken.ENDING_ELEMENT &&
                   parser.CurrentToken.Keyword != KeywordToken.EOF &&
                   parser.CurrentToken.Keyword != KeywordToken.ShortClose)
            {
                IAttributeStatementParser attributeNode = null;
                switch (parser.CurrentToken.Keyword)
                {
                // parse attributes
                case KeywordToken.StringLiteral:
                    attributeNode = new UnknownStringLiteralAttribute(parser);
                    break;

                case KeywordToken.Value:
                    attributeNode = new ValueAttribute(parser);
                    break;

                default:
                    parser.NextToken();
                    break;
                }

                if (attributeNode != null)
                {
                    currentNode.SetAttribute(attributeNode.AttributeName,
                                             attributeNode.Parse(parser.CurrentToken).GetAttribute("value"));
                }
            }

            if (parser.CurrentToken.Keyword == KeywordToken.ENDING_ELEMENT)
            {
                // if we are not at the end of the file or at the end tag of the of the current tag. go into the while
                // if we are at the end of the current tag, stop collecting children for the current tag
                while (parser.CurrentToken.Keyword != KeywordToken.EOF &&
                       parser.CurrentToken.Keyword != KeywordToken.Close
                       )
                {
                    // we are in the body of the element
                    parser.NextToken();
                    IStatementParser elementNode = null;
                    switch (parser.CurrentToken.Keyword)
                    {
                    case KeywordToken.StringLiteral:
                        elementNode = new StringLiteralStatementParser(parser);
                        break;

                    case KeywordToken.Paragraph:
                        elementNode = new ParagraphStatementParser(parser);
                        break;

                    case KeywordToken.PreviousParagraph:
                        elementNode = new PreviousParagraphStatementParser(parser);
                        break;

                    case KeywordToken.Color:
                        elementNode = new ColorStatementNode(parser);
                        break;

                    case KeywordToken.Text:
                        elementNode = new TextStatementParser(parser);
                        break;

                    case KeywordToken.Italic:
                        elementNode = new ItalicStatementParser(parser);
                        break;

                    case KeywordToken.ParagraphStyle:
                        elementNode = new ParagraphStyleStatementParser(parser);
                        break;

                    case KeywordToken.Unknown:
                        elementNode = new UnknownElementParser(parser);
                        break;

                    case KeywordToken.Bold:
                        elementNode = new GenericElementNode(parser, KeywordToken.Bold);
                        break;

                    case KeywordToken.Run:
                        elementNode = new GenericElementNode(parser, KeywordToken.Run);
                        break;

                    case KeywordToken.Size:
                        elementNode = new GenericElementNode(parser, KeywordToken.Size);
                        break;
                    }

                    if (elementNode != null)
                    {
                        currentNode.AddChild(elementNode.Parse(parser.CurrentToken));
                    }
                }

                parser.NextToken();
            }
            return(currentNode);
        }