122 lines
3.1 KiB
Haskell
122 lines
3.1 KiB
Haskell
{-# 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
|
|
]
|