module Game.LambdaHack.Command
( Cmd(..), majorCmd, timedCmd, cmdDescription
) where
import Game.LambdaHack.Utils.Assert
import Game.LambdaHack.Grammar
import qualified Game.LambdaHack.Feature as F
data Cmd =
Apply { verb :: Verb, object :: Object, syms :: [Char] }
| Project { verb :: Verb, object :: Object, syms :: [Char] }
| TriggerDir { verb :: Verb, object :: Object, feature :: F.Feature }
| TriggerTile { verb :: Verb, object :: Object, feature :: F.Feature }
| Pickup
| Drop
| Wait
| GameExit
| GameRestart
| GameSave
| Inventory
| TgtFloor
| TgtEnemy
| TgtAscend Int
| EpsIncr Bool
| Cancel
| Accept
| Clear
| History
| CfgDump
| HeroCycle
| HeroBack
| Help
deriving (Show, Read, Eq, Ord)
majorCmd :: Cmd -> Bool
majorCmd cmd = case cmd of
Apply{} -> True
Project{} -> True
TriggerDir{} -> True
TriggerTile{} -> True
Pickup -> True
Drop -> True
GameExit -> True
GameRestart -> True
GameSave -> True
Inventory -> True
Help -> True
_ -> False
timedCmd :: Cmd -> Bool
timedCmd cmd = case cmd of
Apply{} -> True
Project{} -> True
TriggerDir{} -> True
TriggerTile{} -> True
Pickup -> True
Drop -> True
Wait -> True
GameExit -> True
GameRestart -> True
_ -> False
cmdDescription :: Cmd -> String
cmdDescription cmd = case cmd of
Apply{..} -> verb ++ " " ++ addIndefinite object
Project{..} -> verb ++ " " ++ addIndefinite object
TriggerDir{..} -> verb ++ " " ++ addIndefinite object
TriggerTile{..} -> verb ++ " " ++ addIndefinite object
Pickup -> "get an object"
Drop -> "drop an object"
Wait -> ""
GameExit -> "save and exit"
GameRestart -> "restart game"
GameSave -> "save game"
Inventory -> "display inventory"
TgtFloor -> "target location"
TgtEnemy -> "target monster"
TgtAscend k | k == 1 -> "target next shallower level"
TgtAscend k | k >= 2 -> "target " ++ show k ++ " levels shallower"
TgtAscend k | k == 1 -> "target next deeper level"
TgtAscend k | k <= 2 -> "target " ++ show (k) ++ " levels deeper"
TgtAscend _ ->
assert `failure` "void level change in targeting mode in config file"
EpsIncr True -> "swerve targeting line"
EpsIncr False -> "unswerve targeting line"
Cancel -> "cancel action"
Accept -> "accept choice"
Clear -> "clear messages"
History -> "display previous messages"
CfgDump -> "dump current configuration"
HeroCycle -> "cycle among heroes on level"
HeroBack -> "cycle among heroes in the dungeon"
Help -> "display help"