From 3c294fbabd6622b8cd60984d7ed0dd811e8885eb Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Sun, 10 Apr 2022 12:06:10 -0400 Subject: feat(grfn/xanthous): Add a help panel Change-Id: I581a37df0a20fa54878da4446007dbe677e057da Reviewed-on: https://cl.tvl.fyi/c/depot/+/5444 Autosubmit: grfn Reviewed-by: grfn Tested-by: BuildkiteCI --- users/grfn/xanthous/src/Xanthous/Game/Draw.hs | 81 +++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 4 deletions(-) (limited to 'users/grfn/xanthous/src/Xanthous/Game') diff --git a/users/grfn/xanthous/src/Xanthous/Game/Draw.hs b/users/grfn/xanthous/src/Xanthous/Game/Draw.hs index 53ea1c96f8af..291dfd8b5e46 100644 --- a/users/grfn/xanthous/src/Xanthous/Game/Draw.hs +++ b/users/grfn/xanthous/src/Xanthous/Game/Draw.hs @@ -27,6 +27,11 @@ import Xanthous.Game ) import Xanthous.Game.Prompt import Xanthous.Orphans () +import Brick.Widgets.Center (hCenter) +import Xanthous.Command (Keybinding (..), keybindings, Command, commandIsHidden) +import Graphics.Vty.Input.Events (Modifier(..)) +import Graphics.Vty.Input (Key(..)) +import Brick.Widgets.Table -------------------------------------------------------------------------------- cursorPosition :: GameState -> Widget ResourceName -> Widget ResourceName @@ -111,16 +116,84 @@ drawInventoryPanel game (txtWrap . ((bullet <| " ") <>) . description) backpackItems) +drawHelpPanel :: Widget ResourceName +drawHelpPanel + = txtWrap "To move in a direction or attack, use vi keys (hjklyubn):" + <=> txt " " + <=> hCenter keyStar + <=> txt " " + <=> cmds + where + keyStar + = txt "y k u" + <=> txt " \\|/" + <=> txt "h-.-l" + <=> txt " /|\\" + <=> txt "b j n" + + cmds + = renderTable + . alignRight 0 + . setDefaultRowAlignment AlignTop + . surroundingBorder False + . rowBorders False + . columnBorders False + . table $ help <&> \(key, cmd) -> [ txt $ key <> " : " + , hLimitPercent 100 $ txtWrap cmd] + + help = + extraHelp <> + keybindings + ^.. ifolded + . filtered (not . commandIsHidden) + . withIndex + . to (bimap displayKeybinding displayCommand) + extraHelp + = [("Shift-Dir", "Auto-move")] + + displayCommand = tshow @Command + displayKeybinding (Keybinding k mods) = foldMap showMod mods <> showKey k + + showMod MCtrl = "Ctrl-" + showMod MShift = "Shift-" + showMod MAlt = "Alt-" + showMod MMeta = "Meta-" + + showKey (KChar c) = pack [c] + showKey KEsc = "" + showKey KBS = "" + showKey KEnter = "" + showKey KLeft = "" + showKey KRight = "" + showKey KUp = "" + showKey KDown = "" + showKey KUpLeft = "" + showKey KUpRight = "" + showKey KDownLeft = "" + showKey KDownRight = "" + showKey KCenter = "
" + showKey (KFun n) = " tshow n <> ">" + showKey KBackTab = "" + showKey KPrtScr = "" + showKey KPause = "" + showKey KIns = "" + showKey KHome = "" + showKey KPageUp = "" + showKey KDel = "" + showKey KEnd = "" + showKey KPageDown = "" + showKey KBegin = "" + showKey KMenu = "" drawPanel :: GameState -> Panel -> Widget ResourceName drawPanel game panel = border . hLimit 35 . viewport (Resource.Panel panel) Vertical - . case panel of - InventoryPanel -> drawInventoryPanel - ItemDescriptionPanel desc -> const $ txtWrap desc - $ game + $ case panel of + HelpPanel -> drawHelpPanel + InventoryPanel -> drawInventoryPanel game + ItemDescriptionPanel desc -> txtWrap desc drawCharacterInfo :: Character -> Widget ResourceName drawCharacterInfo ch = txt " " <+> charName <+> charHitpoints -- cgit 1.4.1