public ScreenInputProcessResult ProcessInput(ConsoleKey key, Action endDialogueCallback) { var result = new ScreenInputProcessResult(); switch (key) { case ConsoleKey.Q: if (CurrentDialogue == null) { result.SwitchState = GameState.World; result.RerenderFlag = true; } break; case ConsoleKey.UpArrow: TalkToList.PrevItem(); result.RerenderFlag = true; break; case ConsoleKey.DownArrow: TalkToList.NextItem(); result.RerenderFlag = true; break; case ConsoleKey.Enter: TalkToList.PressCurrentItem(); if (CurrentDialogue != null) { TalkToList = new UiSelectList( CurrentDialogue.Choices.Select((c, i) => new UiLabel { Row = i, Text = $" {c.Text}", OnPress = (_, __) => { CurrentDialogue = c.NextDialogue; if (CurrentDialogue == null) { endDialogueCallback(); } } }).ToList() ); } result.RerenderFlag = true; break; } return(result); }
public void Render() { if (CurrentDialogue == null) { Console.WriteLine("Talk to... (Q) to abort"); } else { Console.WriteLine(); Console.WriteLine($" {string.Join("\n ", CurrentDialogue.Text.Split(Configuration.BufferLength - 2))}"); Console.WriteLine(); } TalkToList.Render(); }