This commit is contained in:
2022-07-27 12:49:23 +01:00
parent 6554d219dc
commit 8d17ce66e9
106 changed files with 2911 additions and 2678 deletions
+112 -70
View File
@@ -1,134 +1,176 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
module Dodge.Data.Terminal
where
import GHC.Generics
import Data.Aeson
import Dodge.Data.WorldEffect
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Terminal where
import Color
import Control.Lens
import qualified Data.Text as T
import Data.Aeson
import qualified Data.Map.Strict as M
import qualified Data.Text as T
import Dodge.Data.WorldEffect
import GHC.Generics
data TerminalStatus = TerminalOff | TerminalBusy | TerminalReady
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TerminalStatus where
deriving (Eq, Ord, Show, Read, Generic)
instance ToJSON TerminalStatus where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TerminalStatus
instance FromJSON TerminalStatus
data TerminalInput = TerminalInput
{ _tiText :: T.Text
, _tiFocus :: Bool
, _tiSel :: (Int,Int)
{ _tiText :: T.Text
, _tiFocus :: Bool
, _tiSel :: (Int, Int)
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TerminalInput where
deriving (Eq, Ord, Show, Read, Generic)
instance ToJSON TerminalInput where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TerminalInput
data TerminalBootProgram = TerminalBootMempty
instance FromJSON TerminalInput
data TerminalBootProgram
= TerminalBootMempty
| TerminalBootLines [TerminalLine]
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TerminalBootProgram where
deriving (Eq, Show, Read, Generic)
instance ToJSON TerminalBootProgram where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TerminalBootProgram
instance FromJSON TerminalBootProgram
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
{ _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
, _tmWriteCommands :: [TerminalCommand]
, _tmDeathEffect :: TmWdWd -- Terminal -> World -> World
, _tmStatus :: TerminalStatus
, _tmCommandHistory :: [String]
, _tmToggles :: M.Map String TerminalToggle
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON Terminal where
deriving (Eq, Show, Read, Generic)
instance ToJSON Terminal where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Terminal
instance FromJSON Terminal
data TerminalLineString = TerminalLineConst String Color
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TerminalLineString where
deriving (Eq, Ord, Show, Read, Generic)
instance ToJSON TerminalLineString where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TerminalLineString
data TmTm = TmId
instance FromJSON TerminalLineString
data TmTm
= TmId
| TmTmClearDisplayedLines
| TmTmSetStatus TerminalStatus
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TmTm where
deriving (Eq, Ord, Show, Read, Generic)
instance ToJSON TmTm where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TmTm
instance FromJSON TmTm
data TerminalLine
= TerminalLineDisplay
{_tlPause :: Int
,_tlString :: TerminalLineString -- World -> (String, Color)
{ _tlPause :: Int
, _tlString :: TerminalLineString -- World -> (String, Color)
}
| TerminalLineTerminalEffect
{_tlPause :: Int
,_tlTermEffect :: TmTm -- Terminal -> Terminal
{ _tlPause :: Int
, _tlTermEffect :: TmTm -- Terminal -> Terminal
}
| TerminalLineEffect
{_tlPause :: Int
,_tlEffect :: TmWdWd --Terminal -> World -> World
{ _tlPause :: Int
, _tlEffect :: TmWdWd --Terminal -> World -> World
}
deriving (Eq,Ord,Show,Read,Generic)
deriving (Eq, Show, Read, Generic)
instance ToJSON TerminalLine where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TerminalLine
data TerminalToggle = TerminalToggle
{ _ttTriggerID :: Int
, _ttDeathEffect :: BlBl
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TerminalToggle where
deriving (Eq, Ord, Show, Read, Generic)
instance ToJSON TerminalToggle where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TerminalToggle
data BlBl = BlNegate
instance FromJSON TerminalToggle
data BlBl
= BlNegate
| BlConst Bool
| BlId
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON BlBl where
deriving (Eq, Ord, Show, Read, Generic)
instance ToJSON BlBl where
toEncoding = genericToEncoding defaultOptions
instance FromJSON BlBl
instance FromJSON BlBl
data EffectArguments
= NoArguments {_cmdEffect :: [TerminalLine]}
| OneArgument
{_argType :: String
,_argList :: M.Map String [TerminalLine]
| OneArgument
{ _argType :: String
, _argList :: M.Map String [TerminalLine]
}
deriving (Eq,Ord,Show,Read,Generic)
deriving (Eq, Show, Read, Generic)
instance ToJSON EffectArguments where
toEncoding = genericToEncoding defaultOptions
instance FromJSON EffectArguments
data TerminalCommandEffect = TerminalCommandArguments EffectArguments
data TerminalCommandEffect
= TerminalCommandArguments EffectArguments
| TerminalCommandEffectDamageCoding
| TerminalCommandEffectSensorParameter
| TerminalCommandEffectLinkedObject
| TerminalCommandEffectLinkedObject
| TerminalCommandEffectHelp
| TerminalCommandEffectNoArgumentsStr String
| TerminalCommandEffectCommands
| TerminalCommandEffectSingleCommand WdWd [String]
| TerminalCommandEffectNone
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TerminalCommandEffect where
deriving (Eq, Show, Read, Generic)
instance ToJSON TerminalCommandEffect where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TerminalCommandEffect
instance FromJSON TerminalCommandEffect
data TerminalCommand = TerminalCommand
{ _tcString :: String
, _tcAlias :: [String]
, _tcHelp :: String
, _tcAlias :: [String]
, _tcHelp :: String
, _tcEffect :: TerminalCommandEffect -- Terminal -> World -> EffectArguments
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TerminalCommand where
deriving (Eq, Show, Read, Generic)
instance ToJSON TerminalCommand where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TerminalCommand
instance FromJSON TerminalCommand
makeLenses ''TerminalInput
makeLenses ''Terminal
makeLenses ''TerminalLine