146 lines
3.8 KiB
Haskell
146 lines
3.8 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 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
|
|
{ --_tiText :: String
|
|
_tiSel :: (Int, Int)
|
|
}
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data Terminal = Terminal
|
|
{ _tmID :: Int
|
|
, _tmBootLines :: [TerminalLine]
|
|
, _tmButtonID :: Int
|
|
, _tmMachineID :: Int
|
|
, _tmExternalColor :: Color
|
|
, _tmDisplayedLines :: [(String, Color)]
|
|
, _tmFutureLines :: [TerminalLine]
|
|
, _tmInput :: TerminalInput
|
|
, _tmScrollCommands :: [TerminalCommand]
|
|
, _tmWriteCommands :: [TerminalCommand]
|
|
, _tmDeathEffect :: TmWdWd -- Terminal -> World -> World
|
|
, _tmStatus :: TerminalStatus
|
|
, _tmCommandHistory :: [String]
|
|
, _tmToggles :: M.Map String TerminalToggle
|
|
, _tmPartialCommand :: Maybe TerminalCommand
|
|
-- , _tmType :: TerminalType
|
|
}
|
|
|
|
--deriving (Eq, Show, Read) --, Generic)
|
|
--h--deriving (Eq, Show, Read) --Generic, Flat)
|
|
|
|
data TerminalType = DefaultTerminal
|
|
|
|
data TerminalLineString = TerminalLineConst String Color
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data TmTm
|
|
= TmId
|
|
-- | TmTmSetPartialCommand (Maybe TerminalCommand)
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data TerminalLine
|
|
= TerminalLineDisplay
|
|
{ _tlPause :: Int
|
|
, _tlString :: TerminalLineString -- World -> (String, Color)
|
|
}
|
|
| TerminalLineEffect
|
|
{ _tlPause :: Int
|
|
, _tlEffect :: TmWdWd --Terminal -> World -> World
|
|
}
|
|
|
|
--deriving (Eq, Show, Read) --, Generic)
|
|
--h--deriving (Eq, Show, Read) --Generic, Flat)
|
|
|
|
data TerminalToggle = TerminalToggle
|
|
{ _ttTriggerID :: Int
|
|
, _ttDeathEffect :: BlBl
|
|
}
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data EffectArguments
|
|
= NoArguments {_cmdEffect :: [TerminalLine]}
|
|
| OneArgument
|
|
{ _argType :: String
|
|
, _argList :: M.Map String [TerminalLine]
|
|
}
|
|
|
|
--deriving (Eq, Show, Read) --, Generic)
|
|
--h--deriving (Eq, Show, Read) --Generic, Flat)
|
|
|
|
data TerminalCommandEffect
|
|
= TerminalCommandArguments EffectArguments
|
|
| TerminalCommandEffectDamageCoding
|
|
| TerminalCommandEffectSensorParameter
|
|
| TerminalCommandEffectLinkedObject
|
|
| TerminalCommandEffectHelp
|
|
| TerminalCommandEffectNoArgumentsStr String
|
|
| TerminalCommandEffectCommands
|
|
| TerminalCommandEffectSingleCommand WdWd [String]
|
|
| TerminalCommandEffectNone
|
|
|
|
--deriving (Eq, Show, Read) --, Generic)
|
|
--h--deriving (Eq, Show, Read) --Generic, Flat)
|
|
|
|
data TerminalCommand = TerminalCommand
|
|
{ _tcString :: String
|
|
, _tcAlias :: [String]
|
|
, _tcHelp :: String
|
|
, _tcEffect :: TerminalCommandEffect -- Terminal -> World -> EffectArguments
|
|
}
|
|
|
|
--deriving (Eq, Show, Read) --, Generic)
|
|
--h--deriving (Eq, Show, Read) --Generic, Flat)
|
|
data TmWdWd
|
|
= TmWdId
|
|
| TmWdWdDisconnectTerminal
|
|
| TmWdWdfromWdWd WdWd
|
|
| TmWdWdTermSound SoundID
|
|
| TmWdWdDoDeathTriggers
|
|
| TmTmClearDisplayedLines
|
|
| TmTmSetStatus TerminalStatus
|
|
| TmTmSetPartialCommand (Maybe TerminalCommand)
|
|
|
|
makeLenses ''TerminalInput
|
|
makeLenses ''Terminal
|
|
makeLenses ''TerminalLine
|
|
makeLenses ''TerminalToggle
|
|
makeLenses ''EffectArguments
|
|
makeLenses ''TerminalCommand
|
|
concat
|
|
<$> mapM
|
|
(deriveJSON defaultOptions)
|
|
[ ''TerminalInput
|
|
, ''TerminalLineString
|
|
, ''TmTm
|
|
, ''TerminalLine
|
|
, ''TerminalToggle
|
|
, ''EffectArguments
|
|
, ''TerminalCommandEffect
|
|
, ''TerminalCommand
|
|
, ''TmWdWd
|
|
, ''Terminal
|
|
, ''TerminalType
|
|
]
|