2019-09-01 22:21:45 +02:00
|
|
|
module Xanthous.Monad
|
|
|
|
( AppT(..)
|
|
|
|
, runAppT
|
|
|
|
, continue
|
|
|
|
, halt
|
|
|
|
, say
|
2019-09-10 02:54:33 +02:00
|
|
|
, say_
|
2019-09-01 22:21:45 +02:00
|
|
|
) where
|
|
|
|
|
|
|
|
import Xanthous.Prelude
|
|
|
|
import Control.Monad.Random
|
|
|
|
import Control.Monad.State
|
|
|
|
import qualified Brick
|
|
|
|
import Brick (EventM, Next)
|
|
|
|
import Data.Aeson
|
|
|
|
|
|
|
|
import Xanthous.Game
|
|
|
|
import Xanthous.Messages (message)
|
|
|
|
|
|
|
|
runAppT :: Monad m => AppT m a -> GameState -> m (a, GameState)
|
|
|
|
runAppT appt initialState = flip runStateT initialState . unAppT $ appt
|
|
|
|
|
|
|
|
halt :: AppT (EventM n) (Next GameState)
|
|
|
|
halt = lift . Brick.halt =<< get
|
|
|
|
|
|
|
|
continue :: AppT (EventM n) (Next GameState)
|
|
|
|
continue = lift . Brick.continue =<< get
|
|
|
|
|
|
|
|
|
2019-09-20 18:03:30 +02:00
|
|
|
say :: (MonadRandom m, ToJSON params, MonadState GameState m)
|
|
|
|
=> [Text] -> params -> m ()
|
|
|
|
say msgPath params = do
|
|
|
|
msg <- message msgPath params
|
|
|
|
messageHistory %= pushMessage msg
|
2019-09-10 02:54:33 +02:00
|
|
|
|
2019-09-20 18:03:30 +02:00
|
|
|
say_ :: (MonadRandom m, MonadState GameState m) => [Text] -> m ()
|
|
|
|
say_ msgPath = say msgPath $ object []
|