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