76 lines
1.8 KiB
Haskell
76 lines
1.8 KiB
Haskell
{-# 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
|
|
]
|