Add a Brain class, which determines for an entity the set of moves it makes every step of the game, and begin to implement that for gormlaks. The idea here is that every step of the game, a gormlak will move towards the furthest-away wall it can see.
41 lines
1.5 KiB
Haskell
41 lines
1.5 KiB
Haskell
{-# 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
|
|
|
|
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 _ _ = 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
|