getTokenString() публичный Метод

public getTokenString ( ) : string
Результат string
Пример #1
0
        private TimedDialogueNode VisitTimedDialogueNode(DialogueNode pPrevious)
        {
                        #if DEBUG_WRITE
            Console.WriteLine("VisitTimedDialogueNode()");
                        #endif

            Token  speakerToken = match(Token.TokenType.NAME);
            string speaker      = speakerToken.getTokenString();

            Token  lineToken = match(Token.TokenType.QUOTED_STRING);
            string line      = lineToken.getTokenString();

            TimedDialogueNode n = _dialogueRunner.Create <TimedDialogueNode>(_conversationName, _language, (_nodeCounter++).ToString() + "_line_" + lineToken.LineNr);            // + " (" + line + ")");
            n.speaker = speaker;
            n.line    = line;
            n.CalculateAndSetTimeBasedOnLineLength(false);

            if (lookAheadType(1) == Token.TokenType.BRACKET_LEFT)
            {
                match(Token.TokenType.BRACKET_LEFT);
                string nodeCustomName = match(Token.TokenType.NAME).getTokenString();
                n.name = nodeCustomName;
                match(Token.TokenType.BRACKET_RIGHT);
            }

                        #if DEBUG_WRITE
            Console.WriteLine("Added TimedDialogueNode with name '" + n.name + "' and line '" + n.line + "'");
                        #endif

            AddLinkFromPreviousNode(pPrevious, n);

            return(n);
        }
Пример #2
0
        private string[] VisitFunctionCall(out string pFunctionName)
        {
            List <string> arguments = new List <string>();

            if (lookAheadType(2) == Token.TokenType.DOT)
            {
                // Function looks like this: cat.foo("dog")
                Token  tokenBeforeDot = match(Token.TokenType.NAME);
                string arg0           = tokenBeforeDot.getTokenString();
                arguments.Add(arg0);
                                #if DEBUG_WRITE
                Console.WriteLine("Added argument 0 based on token before dot: " + arg0);
                                #endif
                match(Token.TokenType.DOT);
            }

            Token functionNameToken = match(Token.TokenType.NAME);
            pFunctionName = functionNameToken.getTokenString();

            match(Token.TokenType.PARANTHESIS_LEFT);

            while (true)
            {
                if (lookAheadType(1) == Token.TokenType.PARANTHESIS_RIGHT)
                {
                    break;
                }
                else if (lookAheadType(1) == Token.TokenType.NEW_LINE)
                {
                    match(Token.TokenType.NEW_LINE);
                }
                else
                {
                    string argumentString = GetAStringFromNextToken(true, true);
                                        #if DEBUG_WRITE
                    Console.WriteLine("Matched argument " + argumentString);
                                        #endif
                    arguments.Add(argumentString);
                    if (lookAheadType(1) == Token.TokenType.COMMA)
                    {
                        match(Token.TokenType.COMMA);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            match(Token.TokenType.PARANTHESIS_RIGHT);

            return(arguments.ToArray());
        }
Пример #3
0
        DialogueNode VisitCancelDialogueNode(DialogueNode pPrevious)
        {
                        #if DEBUG_WRITE
            Console.WriteLine("VisitCancelDialogueNode()");
                        #endif

            match(Token.TokenType.CANCEL);
            Token handleNameToken = match(Token.TokenType.NAME);

            CancelDialogueNode n = _dialogueRunner.Create <CancelDialogueNode>(_conversationName, _language, (_nodeCounter++).ToString() + "(cancel)");
            n.handle = handleNameToken.getTokenString();

            AddLinkFromPreviousNode(pPrevious, n);
            return(n);
        }
Пример #4
0
        private TimedWaitDialogueNode VisitTimedWaitDialogueNode(DialogueNode pPrevious)
        {
                        #if DEBUG_WRITE
            Console.WriteLine("TimedWaitDialogueNode()");
                        #endif

            match(Token.TokenType.WAIT);
            Token time = match(Token.TokenType.NUMBER);

            TimedWaitDialogueNode node = _dialogueRunner.Create <TimedWaitDialogueNode>(_conversationName, _language, (_nodeCounter++) + " (timed wait node)");
            node.timer = node.timerStartValue = Convert.ToSingle(time.getTokenString());

                        #if DEBUG_WRITE
            Console.WriteLine("Added TimedWaitDialogueNode() with name '" + node.name + "'");
                        #endif

            AddLinkFromPreviousNode(pPrevious, node);

            return(node);
        }
Пример #5
0
        private GotoDialogueNode VisitGotoDialogueNode(DialogueNode pPrevious)
        {
                        #if DEBUG_WRITE
            Console.WriteLine("GotoDialogueNode()");
                        #endif

            match(Token.TokenType.GOTO);
            Token targetNameToken = match(Token.TokenType.NAME);

            GotoDialogueNode n = _dialogueRunner.Create <GotoDialogueNode>(_conversationName, _language, (_nodeCounter++) + " (goto)");
            n.linkedNode = targetNameToken.getTokenString();

                        #if DEBUG_WRITE
            Console.WriteLine("Added GotoDialogueNode() with name '" + n.name + "'");
                        #endif

            AddLinkFromPreviousNode(pPrevious, n);

            return(n);
        }
Пример #6
0
        private DialogueNode VisitOption(DialogueNode pScopeEndNode)
        {
                        #if DEBUG_WRITE
            Console.WriteLine("VisitOption()");
                        #endif

            Token t = match(Token.TokenType.QUOTED_STRING);
            match(Token.TokenType.COLON);

            TimedDialogueNode optionNode = _dialogueRunner.Create <TimedDialogueNode>(_conversationName, _language, (_nodeCounter++).ToString());
            optionNode.line    = t.getTokenString();
            optionNode.speaker = _playerCharacterName;
            optionNode.CalculateAndSetTimeBasedOnLineLength(true);

                        #if DEBUG_WRITE
            Console.WriteLine("Created an option node with the name '" + optionNode.name + "'" + " and line " + "'" + optionNode.line + "'");
                        #endif

            Nodes(optionNode, pScopeEndNode);

            return(optionNode);
        }
Пример #7
0
        private void Languages()
        {
                        #if DEBUG_WRITE
            Console.WriteLine("Languages()");
                        #endif

            _language = Language.DEFAULT;

            while (lookAheadType(1) != Token.TokenType.EOF)
            {
                if (lookAheadType(1) == Token.TokenType.LANGUAGE)
                {
                    match(Token.TokenType.LANGUAGE);
                    Token  languageNameToken = match(Token.TokenType.NAME);
                    string languageName      = languageNameToken.getTokenString();
                    switch (languageName.ToLower())
                    {
                    case "swedish":
                        _language = Language.SWEDISH;
                        break;

                    case "english":
                        _language = Language.ENGLISH;
                        break;

                    default:
                        throw new GrimmException("Can't handle language '" + languageName + "'");
                    }
                }

                                #if DEBUG_WRITE
                Console.WriteLine("Creating dialogue nodes for language " + _language);
                                #endif

                CreateTreeOfDialogueNodes();
            }
        }
Пример #8
0
        private WaitDialogueNode VisitWaitDialogueNode(DialogueNode pPrevious)
        {
                        #if DEBUG_WRITE
            Console.WriteLine("WaitDialogueNode()");
                        #endif

            match(Token.TokenType.WAIT);

            WaitDialogueNode n = _dialogueRunner.Create <WaitDialogueNode>(_conversationName, _language, (_nodeCounter++) + " (start commando)");

            List <ExpressionDialogueNode> expressionNodes = new List <ExpressionDialogueNode>();

            bool hasEventListener = false;

            while (true)
            {
                if (lookAheadType(1) == Token.TokenType.NAME)
                {
                    string   expressionName = "";
                    string[] args           = VisitFunctionCall(out expressionName);

                    ExpressionDialogueNode expressionNode = _dialogueRunner.Create <ExpressionDialogueNode>(_conversationName, _language, (_nodeCounter++) + " (expression)");
                    expressionNode.expression = expressionName;
                    expressionNode.args       = args;
                    expressionNodes.Add(expressionNode);
                }
                else if (lookAheadType(1) == Token.TokenType.AND)
                {
                    ConsumeCurrentToken();
                }
                else if (lookAheadType(1) == Token.TokenType.LISTEN)
                {
                    if (hasEventListener)
                    {
                        throw new GrimmException(_conversationName + " already has a event listener attached to the wait statement on line " + lookAhead(1).LineNr);
                    }
                    ConsumeCurrentToken();
                    n.eventName      = match(Token.TokenType.NAME).getTokenString();
                    hasEventListener = true;
                                        #if DEBUG_WRITE
                    Console.WriteLine("This WaitDialogueNode has an event called " + n.eventName);
                                        #endif
                }
                else
                {
                    break;
                }
            }

            n.expressions = expressionNodes.ToArray();

            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);
            }

            n.handle = handleName;

            if (_loopStack.Count > 0)
            {
                // Add this listening dialogue node to the scope of the loop so that it is automatically removed when the loop ends
                n.scopeNode = _loopStack.Peek().name;
            }

                        #if DEBUG_WRITE
            Console.WriteLine("Added WaitDialogueNode() with name '" + n.name + "'");
                        #endif

            //if(!_dialogueRunner.HasExpression(expressionName)) {
            //throw new GrimmException("There is no '" + expressionName + "' expression registered in the dialogue runner");
            //}

            SilentDialogueNode silentEndNode = _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() + "(waitBranchStartNode)");
                n.branchNode = eventBranchStartNode.name;
                n.hasBranch  = true;
                match(Token.TokenType.BLOCK_BEGIN);
                Nodes(eventBranchStartNode, silentEndNode);
                match(Token.TokenType.BLOCK_END);

                _loopStack.Pop();
            }
            else
            {
                                #if DEBUG_WRITE
                Console.WriteLine("this wait dialogue node had no body");
                                #endif
            }

            AddLinkFromPreviousNode(pPrevious, n);

            return(n);
        }
Пример #9
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);
        }