{-# LANGUAGE DataKinds, GADTs, KindSignatures, StandaloneDeriving #-}
module Game.LambdaHack.Client.Request
( RequestAI, ReqAI(..), RequestUI, ReqUI(..)
, RequestAnyAbility(..), RequestTimed(..)
) where
import Prelude ()
import Game.LambdaHack.Common.Prelude
import Game.LambdaHack.Common.Ability
import Game.LambdaHack.Common.Actor
import Game.LambdaHack.Common.Faction
import Game.LambdaHack.Common.Item
import Game.LambdaHack.Common.Misc
import Game.LambdaHack.Common.Point
import Game.LambdaHack.Common.Vector
import Game.LambdaHack.Content.ModeKind
type RequestAI = (ReqAI, Maybe ActorId)
data ReqAI =
ReqAINop
| ReqAITimed RequestAnyAbility
deriving Show
type RequestUI = (ReqUI, Maybe ActorId)
data ReqUI =
ReqUINop
| ReqUITimed RequestAnyAbility
| ReqUIGameRestart (GroupName ModeKind) Challenge
| ReqUIGameDropAndExit
| ReqUIGameSaveAndExit
| ReqUIGameSave
| ReqUITactic Tactic
| ReqUIAutomate
deriving Show
data RequestAnyAbility = forall a. RequestAnyAbility (RequestTimed a)
deriving instance Show RequestAnyAbility
data RequestTimed :: Ability -> * where
ReqMove :: Vector -> RequestTimed 'AbMove
ReqMelee :: ActorId -> ItemId -> CStore -> RequestTimed 'AbMelee
ReqDisplace :: ActorId -> RequestTimed 'AbDisplace
ReqAlter :: Point -> RequestTimed 'AbAlter
ReqWait :: RequestTimed 'AbWait
ReqWait10 :: RequestTimed 'AbWait
ReqMoveItems :: [(ItemId, Int, CStore, CStore)] -> RequestTimed 'AbMoveItem
ReqProject :: Point -> Int -> ItemId -> CStore -> RequestTimed 'AbProject
ReqApply :: ItemId -> CStore -> RequestTimed 'AbApply
deriving instance Show (RequestTimed a)