100 lines
3.0 KiB
Haskell
100 lines
3.0 KiB
Haskell
{-# LANGUAGE TemplateHaskell #-}
|
|
{-# LANGUAGE StrictData #-}
|
|
module Dodge.Data.Terminal
|
|
where
|
|
import Dodge.Data.WorldEffect
|
|
import Color
|
|
import Control.Lens
|
|
import qualified Data.Text as T
|
|
import qualified Data.Map.Strict as M
|
|
data TerminalStatus = TerminalOff | TerminalBusy | TerminalReady
|
|
deriving (Eq,Ord,Show,Read)
|
|
data TerminalInput = TerminalInput
|
|
{ _tiText :: T.Text
|
|
, _tiFocus :: Bool
|
|
, _tiSel :: (Int,Int)
|
|
}
|
|
deriving (Eq,Ord,Show,Read)
|
|
data TerminalBootProgram = TerminalBootMempty
|
|
| TerminalBootLines [TerminalLine]
|
|
deriving (Eq,Ord,Show,Read)
|
|
data Terminal = Terminal
|
|
{ _tmID :: Int
|
|
, _tmBootProgram :: TerminalBootProgram -- Terminal -> World -> [TerminalLine]
|
|
, _tmButtonID :: Int
|
|
, _tmMachineID :: Int
|
|
, _tmName :: String
|
|
, _tmDisplayedLines :: [(String,Color)]
|
|
, _tmFutureLines :: [TerminalLine]
|
|
, _tmMaxLines :: Int
|
|
, _tmTitle :: String
|
|
, _tmInput :: TerminalInput
|
|
, _tmScrollCommands :: [TerminalCommand]
|
|
, _tmWriteCommands :: [TerminalCommand]
|
|
, _tmDeathEffect :: TmWdWd -- Terminal -> World -> World
|
|
, _tmStatus :: TerminalStatus
|
|
, _tmCommandHistory :: [String]
|
|
, _tmToggles :: M.Map String TerminalToggle
|
|
}
|
|
deriving (Eq,Ord,Show,Read)
|
|
data TerminalLineString = TerminalLineConst String Color
|
|
deriving (Eq,Ord,Show,Read)
|
|
data TmTm = TmId
|
|
| TmTmClearDisplayedLines
|
|
| TmTmSetStatus TerminalStatus
|
|
deriving (Eq,Ord,Show,Read)
|
|
data TerminalLine
|
|
= TerminalLineDisplay
|
|
{_tlPause :: Int
|
|
,_tlString :: TerminalLineString -- World -> (String, Color)
|
|
}
|
|
| TerminalLineTerminalEffect
|
|
{_tlPause :: Int
|
|
,_tlTermEffect :: TmTm -- Terminal -> Terminal
|
|
}
|
|
| TerminalLineEffect
|
|
{_tlPause :: Int
|
|
,_tlEffect :: TmWdWd --Terminal -> World -> World
|
|
}
|
|
deriving (Eq,Ord,Show,Read)
|
|
data TerminalToggle = TerminalToggle
|
|
{ _ttTriggerID :: Int
|
|
, _ttDeathEffect :: BlBl
|
|
}
|
|
deriving (Eq,Ord,Show,Read)
|
|
data BlBl = BlNegate
|
|
| BlConst Bool
|
|
| BlId
|
|
deriving (Eq,Ord,Show,Read)
|
|
|
|
data EffectArguments
|
|
= NoArguments {_cmdEffect :: [TerminalLine]}
|
|
| OneArgument
|
|
{_argType :: String
|
|
,_argList :: M.Map String [TerminalLine]
|
|
}
|
|
deriving (Eq,Ord,Show,Read)
|
|
|
|
data TerminalCommandEffect = TerminalCommandArguments EffectArguments
|
|
| TerminalCommandEffectDamageCoding
|
|
| TerminalCommandEffectSensorParameter
|
|
| TerminalCommandEffectLinkedObject
|
|
| TerminalCommandEffectHelp
|
|
| TerminalCommandEffectNoArgumentsStr String
|
|
| TerminalCommandEffectCommands
|
|
| TerminalCommandEffectSingleCommand WdWd [String]
|
|
| TerminalCommandEffectNone
|
|
deriving (Eq,Ord,Show,Read)
|
|
|
|
data TerminalCommand = TerminalCommand
|
|
{ _tcString :: String
|
|
, _tcAlias :: [String]
|
|
, _tcHelp :: String
|
|
, _tcEffect :: TerminalCommandEffect -- Terminal -> World -> EffectArguments
|
|
}
|
|
deriving (Eq,Ord,Show,Read)
|
|
makeLenses ''Terminal
|
|
makeLenses ''TerminalLine
|
|
makeLenses ''TerminalCommand
|
|
makeLenses ''TerminalInput
|