private void PrintListeningDialogueNode(ListeningDialogueNode pListeningNode) { Indentation(); _output.Append("LISTEN_FOR " + pListeningNode.eventName + " (scope: " + pListeningNode.scopeNode + ")" + pListeningNode.handle + " {\n"); if (pListeningNode.hasBranch) { _indentationLevel++; DialogueNode branchStartNode = _dialogueRunner.GetDialogueNode(_conversation, pListeningNode.branchNode); SwitchOnNode(branchStartNode); _indentationLevel--; } _output.Append("}\n"); DialogueNode nextNode = _dialogueRunner.GetDialogueNode(_conversation, pListeningNode.nextNode); SwitchOnNode(nextNode); }
private void PrintListeningDialogueNode(ListeningDialogueNode pListeningNode) { Indentation(); _output.Append("LISTEN_FOR " + pListeningNode.eventName + " (scope: " + pListeningNode.scopeNode + ")" + pListeningNode.handle + " {\n"); if(pListeningNode.hasBranch) { _indentationLevel++; DialogueNode branchStartNode = _dialogueRunner.GetDialogueNode(_conversation, pListeningNode.branchNode); SwitchOnNode(branchStartNode); _indentationLevel--; } _output.Append("}\n"); DialogueNode nextNode = _dialogueRunner.GetDialogueNode(_conversation, pListeningNode.nextNode); SwitchOnNode(nextNode); }
DialogueNode VisitListeningDialogueNode(DialogueNode pPrevious) { #if DEBUG_WRITE Console.WriteLine("VisitListeningDialogueNode()"); #endif match(Token.TokenType.LISTEN); string eventName = GetAStringFromNextToken(false, false); string handleName = ""; if (lookAheadType(1) == Token.TokenType.BRACKET_LEFT) { match(Token.TokenType.BRACKET_LEFT); Token handleToken = match(Token.TokenType.NAME); handleName = handleToken.getTokenString(); match(Token.TokenType.BRACKET_RIGHT); } else if ( (lookAheadType(1) != Token.TokenType.EOF) && (lookAheadType(1) != Token.TokenType.NEW_LINE) && (lookAheadType(1) != Token.TokenType.BLOCK_BEGIN)) { throw new GrimmException("Can't follow LISTEN statement with token of type " + lookAheadType(1) + " at line " + lookAhead(1).LineNr + " and position " + lookAhead(1).LinePosition + " in " + _conversationName); } ListeningDialogueNode n = _dialogueRunner.Create <ListeningDialogueNode>(_conversationName, _language, (_nodeCounter++).ToString() + "(event listener)"); n.eventName = eventName; n.handle = handleName; if (_loopStack.Count > 0) { // Add this listening dialogue node to the scope of the loop so that it is automatically removed as a listener when the loop ends n.scopeNode = _loopStack.Peek().name; } SilentDialogueNode silentNode = _dialogueRunner.Create <SilentDialogueNode>(_conversationName, _language, (_nodeCounter++).ToString() + "(silent stop node)"); AllowLineBreak(); if (lookAheadType(1) == Token.TokenType.BLOCK_BEGIN) { _loopStack.Push(n); ImmediateNode eventBranchStartNode = _dialogueRunner.Create <ImmediateNode>(_conversationName, _language, (_nodeCounter++).ToString() + "(eventBranchStartNode)"); n.branchNode = eventBranchStartNode.name; n.hasBranch = true; match(Token.TokenType.BLOCK_BEGIN); Nodes(eventBranchStartNode, silentNode); match(Token.TokenType.BLOCK_END); _loopStack.Pop(); } else { #if DEBUG_WRITE Console.WriteLine("this listening dialogue node had no body"); #endif } AddLinkFromPreviousNode(pPrevious, n); return(n); }