2019-09-20 13:14:55 -04:00
|
|
|
{-# LANGUAGE ViewPatterns #-}
|
|
|
|
--------------------------------------------------------------------------------
|
2019-08-31 13:17:27 -04:00
|
|
|
module Xanthous.Command where
|
2019-09-20 13:14:55 -04:00
|
|
|
--------------------------------------------------------------------------------
|
2019-08-31 13:17:27 -04:00
|
|
|
import Xanthous.Prelude hiding (Left, Right, Down)
|
2019-09-20 13:14:55 -04:00
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
import Graphics.Vty.Input (Key(..), Modifier(..))
|
|
|
|
--------------------------------------------------------------------------------
|
2019-08-31 13:17:27 -04:00
|
|
|
import Xanthous.Data (Direction(..))
|
2019-09-20 13:14:55 -04:00
|
|
|
--------------------------------------------------------------------------------
|
2019-08-31 13:17:27 -04:00
|
|
|
|
|
|
|
data Command
|
|
|
|
= Quit
|
|
|
|
| Move Direction
|
|
|
|
| PreviousMessage
|
2019-09-19 13:56:14 -04:00
|
|
|
| PickUp
|
2019-12-23 12:19:51 -05:00
|
|
|
| Drop
|
2019-09-20 13:14:55 -04:00
|
|
|
| Open
|
2019-09-28 13:20:57 -04:00
|
|
|
| Wait
|
2019-10-06 12:50:29 -04:00
|
|
|
| Eat
|
2019-11-29 15:43:46 -05:00
|
|
|
| Look
|
2019-11-29 14:33:52 -05:00
|
|
|
| Save
|
2019-11-30 19:55:43 -05:00
|
|
|
| Read
|
2019-12-22 22:46:43 -05:00
|
|
|
| ShowInventory
|
2019-12-22 23:22:25 -05:00
|
|
|
| Wield
|
2019-08-31 13:17:27 -04:00
|
|
|
|
2019-09-28 15:01:21 -04:00
|
|
|
-- | TODO replace with `:` commands
|
|
|
|
| ToggleRevealAll
|
|
|
|
|
2019-08-31 13:17:27 -04:00
|
|
|
commandFromKey :: Key -> [Modifier] -> Maybe Command
|
|
|
|
commandFromKey (KChar 'q') [] = Just Quit
|
2019-09-28 13:20:57 -04:00
|
|
|
commandFromKey (KChar '.') [] = Just Wait
|
2019-09-20 13:14:55 -04:00
|
|
|
commandFromKey (KChar (directionFromChar -> Just dir)) [] = Just $ Move dir
|
2019-09-02 10:36:15 -04:00
|
|
|
commandFromKey (KChar 'p') [MCtrl] = Just PreviousMessage
|
2019-09-19 13:56:14 -04:00
|
|
|
commandFromKey (KChar ',') [] = Just PickUp
|
2019-12-23 12:19:51 -05:00
|
|
|
commandFromKey (KChar 'd') [] = Just Drop
|
2019-09-20 13:14:55 -04:00
|
|
|
commandFromKey (KChar 'o') [] = Just Open
|
2019-11-29 15:43:46 -05:00
|
|
|
commandFromKey (KChar ';') [] = Just Look
|
2019-10-06 12:50:29 -04:00
|
|
|
commandFromKey (KChar 'e') [] = Just Eat
|
2019-11-29 14:33:52 -05:00
|
|
|
commandFromKey (KChar 'S') [] = Just Save
|
2019-11-30 19:55:43 -05:00
|
|
|
commandFromKey (KChar 'r') [] = Just Read
|
2019-12-22 22:46:43 -05:00
|
|
|
commandFromKey (KChar 'i') [] = Just ShowInventory
|
2019-12-22 23:22:25 -05:00
|
|
|
commandFromKey (KChar 'w') [] = Just Wield
|
2019-11-29 15:43:46 -05:00
|
|
|
|
2019-12-22 23:22:25 -05:00
|
|
|
-- DEBUG COMMANDS --
|
2019-11-29 15:43:46 -05:00
|
|
|
commandFromKey (KChar 'r') [MMeta] = Just ToggleRevealAll
|
|
|
|
|
2019-08-31 13:17:27 -04:00
|
|
|
commandFromKey _ _ = Nothing
|
2019-09-20 13:14:55 -04:00
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
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
|