{-# LANGUAGE FlexibleContexts #-}
module Game.LambdaHack.Client.HandleResponseM
( MonadClientReadResponse(..), MonadClientWriteRequest(..)
, handleResponse
) where
import Prelude ()
import Game.LambdaHack.Common.Prelude
import Game.LambdaHack.Atomic
import Game.LambdaHack.Client.AI
import Game.LambdaHack.Client.HandleAtomicM
import Game.LambdaHack.Client.MonadClient
import Game.LambdaHack.Client.UI
import Game.LambdaHack.Common.Request
import Game.LambdaHack.Common.Response
class MonadClient m => MonadClientReadResponse m where
receiveResponse :: m Response
class MonadClient m => MonadClientWriteRequest m where
sendRequestAI :: RequestAI -> m ()
sendRequestUI :: RequestUI -> m ()
clientHasUI :: m Bool
handleResponse :: ( MonadClientSetup m
, MonadClientUI m
, MonadAtomic m
, MonadClientWriteRequest m )
=> Response -> m ()
handleResponse cmd = case cmd of
RespUpdAtomic cmdA -> do
hasUI <- clientHasUI
cmds <- cmdAtomicFilterCli cmdA
let handle !c = do
cli <- getClient
cmdAtomicSemCli c
execUpdAtomic c
when hasUI $ displayRespUpdAtomicUI False cli c
mapM_ handle cmds
RespQueryAI aid -> do
cmdC <- queryAI aid
sendRequestAI cmdC
RespSfxAtomic sfx ->
displayRespSfxAtomicUI False sfx
RespQueryUI -> do
cmdH <- queryUI
sendRequestUI cmdH