{-# LANGUAGE FlexibleContexts #-}
module Game.LambdaHack.Client.HandleResponseM
( MonadClientWriteRequest(..)
, MonadClientAtomic(..)
, handleResponse
) where
import Prelude ()
import Game.LambdaHack.Common.Prelude
import Game.LambdaHack.Atomic (UpdAtomic)
import Game.LambdaHack.Client.AI
import Game.LambdaHack.Client.HandleAtomicM
import Game.LambdaHack.Client.MonadClient
import Game.LambdaHack.Client.Request
import Game.LambdaHack.Client.Response
import Game.LambdaHack.Client.UI
import Game.LambdaHack.Common.MonadStateRead
import Game.LambdaHack.Common.State
class MonadClient m => MonadClientWriteRequest m where
sendRequestAI :: RequestAI -> m ()
sendRequestUI :: RequestUI -> m ()
clientHasUI :: m Bool
class MonadClient m => MonadClientAtomic m where
execUpdAtomic :: UpdAtomic -> m ()
execPutState :: State -> m ()
handleResponse :: ( MonadClientSetup m
, MonadClientUI m
, MonadClientAtomic m
, MonadClientWriteRequest m )
=> Response -> m ()
handleResponse cmd = case cmd of
RespUpdAtomic newState cmdA -> do
oldState <- getState
execPutState newState
cmdAtomicSemCli oldState cmdA
hasUI <- clientHasUI
when hasUI $ displayRespUpdAtomicUI False cmdA
RespUpdAtomicNoState cmdA -> do
oldState <- getState
execUpdAtomic cmdA
cmdAtomicSemCli oldState cmdA
hasUI <- clientHasUI
when hasUI $ displayRespUpdAtomicUI False cmdA
RespQueryAI aid -> do
cmdC <- queryAI aid
sendRequestAI cmdC
RespSfxAtomic sfx ->
displayRespSfxAtomicUI False sfx
RespQueryUI -> do
cmdH <- queryUI
sendRequestUI cmdH