Inheritance: DialogueNode, IRegisteredDialogueNode
Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }