public static CreateNode ( Type, nodeType, AiBehaviour, blackboard ) : ANode, | ||
nodeType | Type, | |
blackboard | AiBehaviour, | |
return | ANode, |
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)); }
private void CreateSpearatorNodes(ASTNodeList newNodes) { newNodes.Add(NodeFactory.CreateNode("||")); newNodes.Add(NodeFactory.CreateNode("'-'")); newNodes.Add(NodeFactory.CreateNode("||")); }
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); }