コード例 #1
0
ファイル: Log.cs プロジェクト: m9ra/KnowledgeDialog
        internal static void State(BeamNode node)
        {
            var events      = new List <EventBase>();
            var currentNode = node;

            while (currentNode != null && currentNode.Evt != null)
            {
                events.Add(currentNode.Evt);
                currentNode = currentNode.ParentNode;
            }

            events.Reverse();
            foreach (var evt in events)
            {
                var color = ItemColor;
                if (evt is TurnStartEvent || evt is TurnEndEvent || evt is FrameEvent)
                {
                    color = PolicyColor;
                }

                if (evt is InstanceOutputEvent || evt is ExportEvent)
                {
                    color = ExecutedCommandColor;
                }

                if (evt is InputPhraseEvent || evt is OutputEvent)
                {
                    color = UtteranceColor;
                }

                if (evt is ConceptDescriptionEvent || evt is ConceptDefinedEvent)
                {
                    color = ConsoleColor.Yellow;
                }

                if (evt is TurnEndEvent)
                {
                    Dedent();
                }

                if (evt is TracedScoreEventBase)
                {
                    var scoreEvt  = evt as TracedScoreEventBase;
                    var score     = BeamGenerator.GetScore(scoreEvt, node);
                    var scoreText = score.ToString("0.00");
                    if (score >= 0)
                    {
                        scoreText = "+" + scoreText;
                    }

                    Writeln($"[{scoreText}]", color);
                    continue;
                }

                Writeln(evt.ToString(), color);

                if (evt is TurnStartEvent)
                {
                    Indent();
                }
            }
        }