about summary refs log blame commit diff
path: root/src/Xanthous/Command.hs
blob: 35a8ce3672694be72161b69ae287b6e947cd7e60 (plain) (tree)
1
2
3
4
5
6
7
8
9

                                                                                
                             
                                                                                
                                                  


                                                                                
                                    
                                                                                



                  
                   
          
        
        
       
        
        
 


                                       

                                                    
                                         
                                                                           
                                                         
                                           
                                         
                                         
                                        
                                         


                                                         
                            













                                                                                
{-# LANGUAGE ViewPatterns #-}
--------------------------------------------------------------------------------
module Xanthous.Command where
--------------------------------------------------------------------------------
import Xanthous.Prelude hiding (Left, Right, Down)
--------------------------------------------------------------------------------
import Graphics.Vty.Input (Key(..), Modifier(..))
--------------------------------------------------------------------------------
import Xanthous.Data (Direction(..))
--------------------------------------------------------------------------------

data Command
  = Quit
  | Move Direction
  | PreviousMessage
  | PickUp
  | Open
  | Wait
  | Eat
  | Look
  | Save

    -- | TODO replace with `:` commands
  | ToggleRevealAll

commandFromKey :: Key -> [Modifier] -> Maybe Command
commandFromKey (KChar 'q') [] = Just Quit
commandFromKey (KChar '.') [] = Just Wait
commandFromKey (KChar (directionFromChar -> Just dir)) [] = Just $ Move dir
commandFromKey (KChar 'p') [MCtrl] = Just PreviousMessage
commandFromKey (KChar ',') [] = Just PickUp
commandFromKey (KChar 'o') [] = Just Open
commandFromKey (KChar ';') [] = Just Look
commandFromKey (KChar 'e') [] = Just Eat
commandFromKey (KChar 'S') [] = Just Save

commandFromKey (KChar 'r') [MMeta] = Just ToggleRevealAll

commandFromKey _ _ = Nothing

--------------------------------------------------------------------------------

directionFromChar :: Char -> Maybe Direction
directionFromChar 'h' = Just Left
directionFromChar 'j' = Just Down
directionFromChar 'k' = Just Up
directionFromChar 'l' = Just Right
directionFromChar 'y' = Just UpLeft
directionFromChar 'u' = Just UpRight
directionFromChar 'b' = Just DownLeft
directionFromChar 'n' = Just DownRight
directionFromChar '.' = Just Here
directionFromChar _   = Nothing