{-# 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 -- { _tiSel :: (Int, Int) -- } data Terminal = Terminal { _tmID :: Int , _tmBootLines :: [TerminalLine] , _tmButtonID :: Int , _tmMachineID :: Int , _tmExternalColor :: Color , _tmDisplayedLines :: [(String, Color)] , _tmFutureLines :: [TerminalLine] , _tmScrollCommands :: [TerminalCommand] , _tmDeathEffect :: TmWdWd , _tmStatus :: TerminalStatus , _tmCommandHistory :: [String] , _tmToggles :: M.Map String TerminalToggle , _tmPartialCommand :: Maybe TerminalCommand } data TerminalLineString = TerminalLineConst String Color data TerminalLine = TLine { _tlPause :: Int , _tlString :: [TerminalLineString] -- World -> (String, Color) , _tlEffect :: TmWdWd --Terminal -> World -> World } data TerminalToggle = TerminalToggle { _ttTriggerID :: Int , _ttDeathEffect :: BlBl } data EffectArguments = NoArguments {_cmdEffect :: [TerminalLine]} | OneArgument { _argType :: String , _argList :: M.Map String [TerminalLine] } data TerminalCommandEffect = TerminalCommandArguments EffectArguments | TerminalCommandEffectDamageCoding | TerminalCommandEffectSensorParameter | TerminalCommandEffectLinkedObject | TerminalCommandEffectHelp | TerminalCommandEffectNoArgumentsStr String | TerminalCommandEffectCommands | TerminalCommandEffectSingleCommand WdWd [String] | TerminalCommandEffectNone data TerminalCommand = TerminalCommand { _tcString :: String , _tcAlias :: [String] , _tcHelp :: String , _tcEffect :: TerminalCommandEffect -- Terminal -> World -> EffectArguments } --data TCom = TCom -- { _tcomHelp :: String -- , _tcomArgs :: Trie Char [TerminalLine] -- } data TmWdWd = TmWdId | TmWdWdDisconnectTerminal | TmWdWdfromWdWd WdWd | TmWdWdTermSound SoundID | TmWdWdDoDeathTriggers | TmTmClearDisplayedLines | TmTmSetStatus TerminalStatus | TmTmSetPartialCommand (Maybe TerminalCommand) makeLenses ''Terminal makeLenses ''TerminalLine makeLenses ''TerminalToggle makeLenses ''EffectArguments makeLenses ''TerminalCommand concat <$> mapM (deriveJSON defaultOptions) [ ''TerminalLineString , ''TerminalLine , ''TerminalToggle , ''EffectArguments , ''TerminalCommandEffect , ''TerminalCommand , ''TmWdWd , ''Terminal ]