{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Terminal ( module Dodge.Data.Terminal, module Dodge.Data.Terminal.Status, ) where import Dodge.Data.Machine.Sensor.Type 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] , _tmCommands :: [TCom] , _tmDeathEffect :: TmWdWd , _tmStatus :: TerminalStatus , _tmCommandHistory :: [String] , _tmToggles :: M.Map String TerminalToggle } 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 = TCInfo String String -- this may not be necessary, to revisit | TCBase | TCDamageCommand | TCSensorInfo | TCToggles --data TEff = TEff -- { _teffHelp :: String -- , _teffArgs :: PTE.TrieMap Char [TerminalLine] -- } data TmWdWd = TmWdId | TmWdWdPowerDownTerminal | TmWdWdDeactivateTerminal | TmWdWdfromWdWd WdWd | TmWdWdTermSound SoundID | TmWdWdDoDeathTriggers | TmTmClearDisplayedLines | TmTmSetStatus TerminalStatus | TmGetDamageCoding SensorType | TmGetSensor String -- | TmDisplayCommands makeLenses ''Terminal makeLenses ''TerminalLine makeLenses ''TerminalToggle makeLenses ''EffectArguments --makeLenses ''TerminalCommand makeLenses ''TCom concat <$> mapM (deriveJSON defaultOptions) [ ''TerminalLineString , ''TerminalLine , ''TerminalToggle , ''EffectArguments , ''TerminalCommandEffect -- , ''TerminalCommand , ''TCom , ''TmWdWd , ''Terminal ]