{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Terminal ( module Dodge.Data.Terminal, module Dodge.Data.Terminal.Status, ) where 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 import Sound.Data data Terminal = Terminal { _tmID :: Int , _tmBootLines :: [TerminalLine] , _tmButtonID :: Int , _tmMachineID :: Int , _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 TCom = TCInfo String String -- this may not be necessary, to revisit | TCBase | TCDamageCommand data TmWdWd = TmWdId | TmWdWdPowerDownTerminal | TmWdWdLeaveTerminal String | TmWdWdDeactivateTerminal | TmWdWdfromWdWd WdWd | TmWdWdTermSound SoundID | TmWdWdDoDeathTriggers | TmTmClearDisplayedLines | TmTmSetStatus TerminalStatus makeLenses ''Terminal makeLenses ''TerminalLine makeLenses ''TerminalToggle makeLenses ''TCom concat <$> mapM (deriveJSON defaultOptions) [ ''TerminalLineString , ''TerminalLine , ''TerminalToggle , ''TCom , ''TmWdWd , ''Terminal ]