{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Terminal ( module Dodge.Data.Terminal, module Dodge.Data.Terminal.Status, ) where import Sound.Data import Color import Control.Lens import Data.Aeson import Data.Aeson.TH import qualified Data.Map.Strict as M import Dodge.Data.BlBl import Dodge.Data.Terminal.Status import Dodge.Data.WorldEffect data TerminalInput = TerminalInput { --_tiText :: String _tiSel :: (Int, Int) } --deriving (Eq, Ord, Show, Read) --Generic, Flat) data Terminal = Terminal { _tmID :: Int , _tmBootLines :: [TerminalLine] , _tmButtonID :: Int , _tmMachineID :: Int , _tmExternalColor :: Color , _tmDisplayedLines :: [(String, Color)] , _tmFutureLines :: [TerminalLine] , _tmInput :: TerminalInput , _tmScrollCommands :: [TerminalCommand] , _tmWriteCommands :: [TerminalCommand] , _tmDeathEffect :: TmWdWd -- Terminal -> World -> World , _tmStatus :: TerminalStatus , _tmCommandHistory :: [String] , _tmToggles :: M.Map String TerminalToggle , _tmPartialCommand :: Maybe TerminalCommand -- , _tmType :: TerminalType } --deriving (Eq, Show, Read) --, Generic) --h--deriving (Eq, Show, Read) --Generic, Flat) data TerminalType = DefaultTerminal data TerminalLineString = TerminalLineConst String Color --deriving (Eq, Ord, Show, Read) --Generic, Flat) data TmTm = TmId -- | TmTmSetPartialCommand (Maybe TerminalCommand) --deriving (Eq, Ord, Show, Read) --Generic, Flat) data TerminalLine = TerminalLineDisplay { _tlPause :: Int , _tlString :: TerminalLineString -- World -> (String, Color) } | TerminalLineEffect { _tlPause :: Int , _tlEffect :: TmWdWd --Terminal -> World -> World } --deriving (Eq, Show, Read) --, Generic) --h--deriving (Eq, Show, Read) --Generic, Flat) data TerminalToggle = TerminalToggle { _ttTriggerID :: Int , _ttDeathEffect :: BlBl } --deriving (Eq, Ord, Show, Read) --Generic, Flat) data EffectArguments = NoArguments {_cmdEffect :: [TerminalLine]} | OneArgument { _argType :: String , _argList :: M.Map String [TerminalLine] } --deriving (Eq, Show, Read) --, Generic) --h--deriving (Eq, Show, Read) --Generic, Flat) data TerminalCommandEffect = TerminalCommandArguments EffectArguments | TerminalCommandEffectDamageCoding | TerminalCommandEffectSensorParameter | TerminalCommandEffectLinkedObject | TerminalCommandEffectHelp | TerminalCommandEffectNoArgumentsStr String | TerminalCommandEffectCommands | TerminalCommandEffectSingleCommand WdWd [String] | TerminalCommandEffectNone --deriving (Eq, Show, Read) --, Generic) --h--deriving (Eq, Show, Read) --Generic, Flat) data TerminalCommand = TerminalCommand { _tcString :: String , _tcAlias :: [String] , _tcHelp :: String , _tcEffect :: TerminalCommandEffect -- Terminal -> World -> EffectArguments } --deriving (Eq, Show, Read) --, Generic) --h--deriving (Eq, Show, Read) --Generic, Flat) data TmWdWd = TmWdId | TmWdWdDisconnectTerminal | TmWdWdfromWdWd WdWd | TmWdWdTermSound SoundID | TmWdWdDoDeathTriggers | TmTmClearDisplayedLines | TmTmSetStatus TerminalStatus | TmTmSetPartialCommand (Maybe TerminalCommand) makeLenses ''TerminalInput makeLenses ''Terminal makeLenses ''TerminalLine makeLenses ''TerminalToggle makeLenses ''EffectArguments makeLenses ''TerminalCommand concat <$> mapM (deriveJSON defaultOptions) [ ''TerminalInput , ''TerminalLineString , ''TmTm , ''TerminalLine , ''TerminalToggle , ''EffectArguments , ''TerminalCommandEffect , ''TerminalCommand , ''TmWdWd , ''Terminal , ''TerminalType ]