Move towards implementing terminal autocomplete

This commit is contained in:
2025-08-16 23:13:24 +01:00
parent f7759b1f31
commit 76b6cda19b
14 changed files with 351 additions and 261 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+12 -8
View File
@@ -8,7 +8,6 @@ module Dodge.Data.Terminal (
module Dodge.Data.Terminal.Status,
) where
import qualified Data.ListTrie.Patricia.Map.Enum as PT
import Sound.Data
import Color
import Control.Lens
@@ -31,12 +30,12 @@ data Terminal = Terminal
, _tmExternalColor :: Color
, _tmDisplayedLines :: [(String, Color)]
, _tmFutureLines :: [TerminalLine]
, _tmCommands :: [TerminalCommand]
, _tmCommands :: [TCom]
, _tmDeathEffect :: TmWdWd
, _tmStatus :: TerminalStatus
, _tmCommandHistory :: [String]
, _tmToggles :: M.Map String TerminalToggle
, _tmPartialCommand :: Maybe TerminalCommand
-- , _tmPartialCommand :: Maybe TerminalCommand
}
data TerminalLineString = TerminalLineConst String Color
@@ -77,10 +76,13 @@ data TerminalCommand = TerminalCommand
, _tcEffect :: TerminalCommandEffect -- Terminal -> World -> EffectArguments
}
data TCom = TCom
{ _tcomHelp :: String
, _tcomArgs :: PT.TrieMap Char [TerminalLine]
}
data TCom = TCInfo String String
| TCBase
--data TEff = TEff
-- { _teffHelp :: String
-- , _teffArgs :: PTE.TrieMap Char [TerminalLine]
-- }
data TmWdWd
= TmWdId
@@ -90,13 +92,14 @@ data TmWdWd
| TmWdWdDoDeathTriggers
| TmTmClearDisplayedLines
| TmTmSetStatus TerminalStatus
| TmTmSetPartialCommand (Maybe TerminalCommand)
| TmDisplayCommands
makeLenses ''Terminal
makeLenses ''TerminalLine
makeLenses ''TerminalToggle
makeLenses ''EffectArguments
makeLenses ''TerminalCommand
makeLenses ''TCom
concat
<$> mapM
(deriveJSON defaultOptions)
@@ -106,6 +109,7 @@ concat
, ''EffectArguments
, ''TerminalCommandEffect
, ''TerminalCommand
, ''TCom
, ''TmWdWd
, ''Terminal
]
+1 -1
View File
@@ -10,7 +10,7 @@ import Data.Aeson.TH
data TerminalStatus
= TerminalOff
| TerminalBusy
| TerminalTextInput {_tiText :: String, _tiSel :: Int}
| TerminalTextInput {_tiText :: String}
| TerminalPressTo {_tptString :: String}
-- | TerminalArgumentInput TerminalCommand
deriving (Eq)
+2 -5
View File
@@ -16,14 +16,11 @@ defaultTerminal =
, _tmMachineID = 0
, _tmDisplayedLines = []
, _tmFutureLines = []
-- , _tmInput = defaultTerminalInput
, _tmCommands = []
-- , _tmWriteCommands = []
, _tmDeathEffect = TmWdId
, _tmCommands = [TCInfo "TEST" "display text",TCBase]
, _tmDeathEffect = TmWdWdDoDeathTriggers
, _tmStatus = TerminalOff
, _tmCommandHistory = []
, _tmToggles = mempty
, _tmPartialCommand = Nothing
, _tmExternalColor = dark magenta
}
+2 -1
View File
@@ -21,7 +21,8 @@ analyser proxreq pslight psmc = extTrigLitPos pslight $ \tp ->
(themachine & mcMounts . at OTTrigger .~ _plMID tp)
tparams -- (linksensortotrigger tp)
where
tparams = basicTerminal & tmCommands .:~ sensorCommand
--tparams = basicTerminal & tmCommands .:~ sensorCommand
tparams = basicTerminal
-- linksensortotrigger tp _ mc
-- = triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc)
themachine =
+1 -1
View File
@@ -384,7 +384,7 @@ drawTerminalDisplay tid cfig w = fromMaybe mempty $ do
displayTermInput tm = case _tmStatus tm of
TerminalOff -> id
TerminalBusy -> (++ [([cFilledRect], white)])
TerminalTextInput s _ ->
TerminalTextInput s ->
(++ [(getPromptTM ++ s ++ [cFilledRect], white)])
TerminalPressTo s ->
(++ [("PRESS TO "++s, white)])
+2 -1
View File
@@ -74,7 +74,8 @@ sensInsideDoor senseType outplid rm =
.++~ [ psPt atFstLnkOut . PutForeground $ floorWire (V2 20 0) (V2 20 (-100))
, psPt atFstLnkOut . PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100))
, psPt atFstLnkOut . PutForeground $ verticalWire (V2 20 0) 0 80
, putMessageTerminal terminalColor (basicTerminal & tmCommands .:~ damageCodeCommand)
, putMessageTerminal terminalColor (basicTerminal-- & tmCommands .:~ damageCodeCommand)
)
& plSpot .~ rprBoolShift isUnusedLnk (shiftInBy 10)
]
& rmOutPmnt .~ [OutPlacement (sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100)) outplid]
+1 -1
View File
@@ -47,7 +47,7 @@ addWarningTerminal str outplid =
)
termMessages trpl =
lineOutputTerminal (makeColorTermLine red "WARNING" : makeTermPara str)
& tmCommands .:~ toggleCommand
-- & tmCommands .:~ toggleCommand
& tmToggles
.~ M.fromList
[("DOOR", TerminalToggle (fromJust $ _plMID trpl) (BlConst True))]
+157 -132
View File
@@ -1,10 +1,11 @@
{-# LANGUAGE LambdaCase #-}
module Dodge.Terminal (
doTerminalCommandEffect,
-- doTerminalCommandEffect,
makeTermLine,
commandFutureLines,
quitCommand,
helpCommand,
commandsCommand,
-- commandFutureLines,
-- quitCommand,
-- helpCommand,
-- commandsCommand,
connectionBlurbLines,
disconnectTerminal,
basicTerminal,
@@ -15,15 +16,18 @@ module Dodge.Terminal (
makeTermPara,
toggleCommand,
terminalReturnEffect,
getCommands,
makeColorTermPara,
commandColor,
) where
import Dodge.Data.WorldEffect
import qualified Data.ListTrie.Patricia.Map.Enum as PTE
--import Dodge.Data.WorldEffect
import Dodge.Data.Terminal.Status
import Color
--import Control.Monad
import Data.Char
import Data.Foldable
import qualified Data.Map.Strict as M
--import Data.Char
--import qualified Data.Map.Strict as M
import Data.Maybe
import Dodge.Data.World
import Dodge.Default
@@ -31,18 +35,13 @@ import Dodge.SoundLogic
import Dodge.Terminal.Type
import Justify
import LensHelp
import ListHelp (safeHead, safeUncons)
--import ListHelp (safeHead, safeUncons)
import Sound.Data
basicTerminal :: Terminal
basicTerminal =
defaultTerminal
{ _tmDisplayedLines = []
, _tmFutureLines = []
-- , _tmTitle = "TERMINAL"
, _tmCommands = [helpCommand,commandsCommand,quitCommand]
-- , _tmWriteCommands = [helpCommand, commandsCommand]
, _tmBootLines = connectionBlurb
{ _tmBootLines = connectionBlurb
, _tmDeathEffect = TmWdWdDoDeathTriggers
}
@@ -52,53 +51,53 @@ connectionBlurbLines tls =
, TLine 0 [TerminalLineConst "LOADING TEXT INTERFACE..." termTextColor] TmWdId
]
++ tls
++ [ TLine 10 [TerminalLineConst "READY FOR INPUT" termTextColor] (TmTmSetStatus (TerminalTextInput "" 0))]
++ [ TLine 10 [TerminalLineConst "READY FOR INPUT" termTextColor] (TmTmSetStatus (TerminalTextInput ""))]
-- ++ [TerminalLineEffect 0 (TmTmSetStatus (TerminalTextInput "" 0))]
quitCommand :: TerminalCommand
quitCommand =
TerminalCommand
{ _tcString = "QUIT"
, _tcAlias = ["Q", "EXIT", "X", "SHUTDOWN", ""]
, _tcHelp = "Disconnects the terminal."
, _tcEffect = TerminalCommandArguments $ NoArguments [TLine 0 [] TmWdWdDisconnectTerminal]
}
--quitCommand :: TerminalCommand
--quitCommand =
-- TerminalCommand
-- { _tcString = "QUIT"
-- , _tcAlias = ["Q", "EXIT", "X", "SHUTDOWN", ""]
-- , _tcHelp = "Disconnects the terminal."
-- , _tcEffect = TerminalCommandArguments $ NoArguments [TLine 0 [] TmWdWdDisconnectTerminal]
-- }
helpCommand :: TerminalCommand
helpCommand =
TerminalCommand
{ _tcString = "HELP"
, _tcAlias = ["H", "MAN"]
, _tcHelp = "Displays help for a specific command."
, _tcEffect = TerminalCommandEffectHelp -- \tm -> OneArgument "AN AVAILABLE COMMAND" . getCommandsHelp tm
}
--helpCommand :: TerminalCommand
--helpCommand =
-- TerminalCommand
-- { _tcString = "HELP"
-- , _tcAlias = ["H", "MAN"]
-- , _tcHelp = "Displays help for a specific command."
-- , _tcEffect = TerminalCommandEffectHelp -- \tm -> OneArgument "AN AVAILABLE COMMAND" . getCommandsHelp tm
-- }
getCommandsHelp :: Terminal -> World -> M.Map String [TerminalLine]
getCommandsHelp tm w = foldr f mempty $ getCommands tm
where
f tc =
M.insert
(_tcString tc)
( [ makeTermLine "Command:"
, makeColorTermLine commandColor (_tcString tc)
, makeTermLine "Aliases:"
, makeColorTermLine commandColor (unwords (_tcAlias tc))
]
++ case argumentHelp tc tm w of
(arghelp, Nothing) -> makeTermPara $ _tcHelp tc ++ " " ++ arghelp
(arghelp, Just args) ->
makeTermPara (_tcHelp tc ++ " " ++ arghelp)
++ [makeColorTermLine commandColor $ unwords args]
)
--getCommandsHelp :: Terminal -> World -> M.Map String [TerminalLine]
--getCommandsHelp tm w = foldr f mempty $ getCommands tm
-- where
-- f tc =
-- M.insert
-- (_tcString tc)
-- ( [ makeTermLine "Command:"
-- , makeColorTermLine commandColor (_tcString tc)
-- , makeTermLine "Aliases:"
-- , makeColorTermLine commandColor (unwords (_tcAlias tc))
-- ]
-- ++ case argumentHelp tc tm w of
-- (arghelp, Nothing) -> makeTermPara $ _tcHelp tc ++ " " ++ arghelp
-- (arghelp, Just args) ->
-- makeTermPara (_tcHelp tc ++ " " ++ arghelp)
-- ++ [makeColorTermLine commandColor $ unwords args]
-- )
commandsCommand :: TerminalCommand
commandsCommand =
TerminalCommand
{ _tcString = "COMMANDS"
, _tcAlias = ["COMMAND", "COM"]
, _tcHelp = "Displays available commands."
, _tcEffect = TerminalCommandEffectCommands
}
--commandsCommand :: TerminalCommand
--commandsCommand =
-- TerminalCommand
-- { _tcString = "COMMANDS"
-- , _tcAlias = ["COMMAND", "COM"]
-- , _tcHelp = "Displays available commands."
-- , _tcEffect = TerminalCommandEffectCommands
-- }
connectionBlurb :: [TerminalLine]
connectionBlurb = connectionBlurbLines []
@@ -109,8 +108,28 @@ termSoundLine sid = TLine 0 [] (TmWdWdTermSound sid)
termTextColor :: Color
termTextColor = greyN 0.9
getCommands :: Terminal -> [TerminalCommand]
getCommands tm = _tmCommands tm -- ++ _tmWriteCommands tm
getCommands :: Terminal -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine])
getCommands = foldMap getCommand . _tmCommands -- tm -- ++ _tmWriteCommands tm
getCommand :: TCom -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine])
getCommand = \case
TCInfo x z -> PTE.singleton x (PTE.singleton "" (makeTermPara z))
TCBase -> helpCommand <> commandsCommand <> quitCommand
helpCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine])
helpCommand = PTE.singleton "HELP" (fmap makeTermPara helpStrings)
helpStrings :: PTE.TrieMap Char String
helpStrings = PTE.fromList
[("", "THIS TERMINAL PROCESSES TEXT INPUT. INPUT \"COMMANDS\" TO LIST AVAILABLE FUNCTIONALITY.")
,("HELP", "BASIC HELP. ACCEPTS A COMMAND AS AN ARGUMENT.")
]
commandsCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine])
commandsCommand = PTE.singleton "COMMANDS" (PTE.singleton "" [TLine 0 [] TmDisplayCommands])
quitCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine])
quitCommand = PTE.singleton "QUIT" (PTE.singleton "" [TLine 0 [] TmWdWdDisconnectTerminal])
makeTermLine :: String -> TerminalLine
makeTermLine = makeColorTermLine termTextColor
@@ -127,29 +146,29 @@ makeColorTermLine col str = TLine 1 [TerminalLineConst str col] TmWdId
commandColor :: Color
commandColor = yellow
doTerminalCommandEffect :: TerminalCommandEffect -> Terminal -> World -> EffectArguments
doTerminalCommandEffect tce = case tce of
TerminalCommandArguments eas -> \_ _ -> eas
TerminalCommandEffectDamageCoding -> \_ -> OneArgument "a damage type" . getDamageCoding
TerminalCommandEffectSensorParameter -> \tm -> OneArgument "a sensor parameter" . sensorInfoMap tm
TerminalCommandEffectLinkedObject -> \tm _ -> OneArgument "a linked object" (togglesToEffects tm)
TerminalCommandEffectHelp -> \tm -> OneArgument "an available command" . getCommandsHelp tm
TerminalCommandEffectNoArgumentsStr str -> \_ _ -> NoArguments (makeTermPara str)
TerminalCommandEffectCommands -> \tm _ ->
NoArguments
( makeTermLine "Available commands:" :
makeColorTermPara commandColor (unwords (map _tcString $ getCommands tm))
)
TerminalCommandEffectSingleCommand eff followingLines -> \_ _ -> NoArguments $ TLine 0 [] (TmWdWdfromWdWd eff) : map makeTermLine followingLines
TerminalCommandEffectNone -> \_ _ -> NoArguments []
--doTerminalCommandEffect :: TerminalCommandEffect -> Terminal -> World -> EffectArguments
--doTerminalCommandEffect tce = case tce of
-- TerminalCommandArguments eas -> \_ _ -> eas
-- TerminalCommandEffectDamageCoding -> \_ -> OneArgument "a damage type" . getDamageCoding
-- TerminalCommandEffectSensorParameter -> \tm -> OneArgument "a sensor parameter" . sensorInfoMap tm
-- TerminalCommandEffectLinkedObject -> \tm _ -> OneArgument "a linked object" (togglesToEffects tm)
-- TerminalCommandEffectHelp -> \tm -> OneArgument "an available command" . getCommandsHelp tm
-- TerminalCommandEffectNoArgumentsStr str -> \_ _ -> NoArguments (makeTermPara str)
-- TerminalCommandEffectCommands -> \tm _ ->
-- NoArguments
-- ( makeTermLine "Available commands:" :
-- makeColorTermPara commandColor (unwords (map _tcString $ getCommands tm))
-- )
-- TerminalCommandEffectSingleCommand eff followingLines -> \_ _ -> NoArguments $ TLine 0 [] (TmWdWdfromWdWd eff) : map makeTermLine followingLines
-- TerminalCommandEffectNone -> \_ _ -> NoArguments []
argumentHelp :: TerminalCommand -> Terminal -> World -> (String, Maybe [String])
argumentHelp tc tm w = case doTerminalCommandEffect (_tcEffect tc) tm w of
NoArguments{} -> ("Any arguments provided to this command are ignored.", Nothing)
OneArgument argtype argm ->
( "Expects " ++ argtype ++ " as argument. Available arguments: "
, Just (M.keys argm)
)
--argumentHelp :: TerminalCommand -> Terminal -> World -> (String, Maybe [String])
--argumentHelp tc tm w = case doTerminalCommandEffect (_tcEffect tc) tm w of
-- NoArguments{} -> ("Any arguments provided to this command are ignored.", Nothing)
-- OneArgument argtype argm ->
-- ( "Expects " ++ argtype ++ " as argument. Available arguments: "
-- , Just (M.keys argm)
-- )
--infoCommand :: String -> TerminalCommand
--infoCommand str =
@@ -169,24 +188,24 @@ argumentHelp tc tm w = case doTerminalCommandEffect (_tcEffect tc) tm w of
-- , _tcEffect = TerminalCommandEffectSingleCommand eff followingLines
-- }
getDamageCoding :: World -> M.Map String [TerminalLine]
getDamageCoding = decodedtmap . _sensorCoding . _cwgParams . _cwGen . _cWorld
--getDamageCoding :: World -> M.Map String [TerminalLine]
--getDamageCoding = decodedtmap . _sensorCoding . _cwgParams . _cwGen . _cWorld
sensorInfoMap :: Terminal -> World -> M.Map String [TerminalLine]
sensorInfoMap tm w =
M.fromList
[ ("Requirement", getSensor _proxRequirement tm w)
, ("Distance", getSensor _proxDist tm w)
, ("Currentstatus", getSensor _proxStatus tm w)
, ("Paststatus", getSensor _sensToggle tm w)
]
--sensorInfoMap :: Terminal -> World -> M.Map String [TerminalLine]
--sensorInfoMap tm w =
-- M.fromList
-- [ ("Requirement", getSensor _proxRequirement tm w)
-- , ("Distance", getSensor _proxDist tm w)
-- , ("Currentstatus", getSensor _proxStatus tm w)
-- , ("Paststatus", getSensor _sensToggle tm w)
-- ]
getSensor :: Show a => (Sensor -> a) -> Terminal -> World -> [TerminalLine]
getSensor f tm w =
maybe
[]
(makeTermPara . map toLower . show . f)
(w ^? cWorld . lWorld . machines . ix (_tmMachineID tm) . mcType . _McSensor)
--getSensor :: Show a => (Sensor -> a) -> Terminal -> World -> [TerminalLine]
--getSensor f tm w =
-- maybe
-- []
-- (makeTermPara . map toLower . show . f)
-- (w ^? cWorld . lWorld . machines . ix (_tmMachineID tm) . mcType . _McSensor)
toggleCommand :: TerminalCommand
toggleCommand =
@@ -197,8 +216,8 @@ toggleCommand =
, _tcEffect = TerminalCommandEffectLinkedObject -- \tm _ -> OneArgument "A LINKED OBJECT" (togglesToEffects tm)
}
decodedtmap :: M.Map SensorType (PaletteColor, DecorationShape) -> M.Map String [TerminalLine]
decodedtmap = M.mapKeys show . M.map ((: []) . makeTermLine . show)
--decodedtmap :: M.Map SensorType (PaletteColor, DecorationShape) -> M.Map String [TerminalLine]
--decodedtmap = M.mapKeys show . M.map ((: []) . makeTermLine . show)
sensorCommand :: TerminalCommand
sensorCommand =
@@ -240,51 +259,57 @@ damageCodeCommand =
-- . (tmFutureLines ++.~ tls)
-- )
togglesToEffects :: Terminal -> M.Map String [TerminalLine]
togglesToEffects = fmap f . _tmToggles
where
f tt = [TLine 0 [] $ TmWdWdfromWdWd $ WdWdNegateTrig (_ttTriggerID tt)]
--togglesToEffects :: Terminal -> M.Map String [TerminalLine]
--togglesToEffects = fmap f . _tmToggles
-- where
-- f tt = [TLine 0 [] $ TmWdWdfromWdWd $ WdWdNegateTrig (_ttTriggerID tt)]
simpleTermMessage :: [String] -> Terminal
simpleTermMessage strs = defaultTerminal & tmBootLines .~ map makeTermLine strs
commandFutureLines :: String -> Terminal -> World -> [TerminalLine]
commandFutureLines s tm w = fromMaybe [errline "^ Invalid command"] $ do
(str, args) <- safeUncons $ words s
command <- find (\tc -> _tcString tc == str || str `elem` _tcAlias tc) (getCommands tm)
case doTerminalCommandEffect (_tcEffect command) tm w of
NoArguments tls -> Just tls
OneArgument argtype m ->
let setpartial
| null (_tmPartialCommand tm) =
TLine 0 [] (TmTmSetPartialCommand (Just command)) :
makeTermPara ("Expects " ++ argtype ++ " as an argument")
| otherwise =
TLine 0 [] (TmTmSetPartialCommand Nothing) :
makeTermPara "No argument input, cancelling"
in Just $
fromMaybe setpartial $
safeHead args >>= (m M.!?)
where
errline = makeColorTermLine red
--commandFutureLines :: String -> Terminal -> World -> [TerminalLine]
--commandFutureLines s tm w = fromMaybe [errline "^ Invalid command"] $ do
-- (str, args) <- safeUncons $ words s
-- command <- find (\tc -> _tcString tc == str || str `elem` _tcAlias tc) (getCommands tm)
-- case doTerminalCommandEffect (_tcEffect command) tm w of
-- NoArguments tls -> Just tls
-- OneArgument argtype m ->
-- let setpartial
-- | null (_tmPartialCommand tm) =
-- TLine 0 [] (TmTmSetPartialCommand (Just command)) :
-- makeTermPara ("Expects " ++ argtype ++ " as an argument")
-- | otherwise =
-- TLine 0 [] (TmTmSetPartialCommand Nothing) :
-- makeTermPara "No argument input, cancelling"
-- in Just $
-- fromMaybe setpartial $
-- safeHead args >>= (m M.!?)
-- where
-- errline = makeColorTermLine red
terminalReturnEffect :: Int -> World -> World
terminalReturnEffect tmid w = fromMaybe w $ do
tm <- w ^? cWorld . lWorld . terminals. ix tmid
-- guard $ _tmStatus tm == TerminalTextInput
s <- tm ^? tmStatus . tiText
let pc = maybe "" (++ " ") $ tm ^? tmPartialCommand . _Just . tcString
return $
runTerminalString (pc ++ s) tm $
runTerminalInput s tm $
w
& cWorld . lWorld . terminals . ix tmid . tmPartialCommand .~ Nothing
& cWorld . lWorld . terminals . ix tmid . tmFutureLines
.~ [makeTermLine (pc ++ getPromptTM ++ s)]
& cWorld . lWorld . terminals . ix tmid . tmDisplayedLines
.:~ (getPromptTM ++ s,termTextColor)
runTerminalString :: String -> Terminal -> World -> World
runTerminalString s tm w =
runTerminalInput :: String -> Terminal -> World -> World
runTerminalInput s tm w =
w & cWorld . lWorld . terminals . ix (_tmID tm)
%~ ( --(tmInput .~ TerminalInput{ _tiSel = (0, 0)})
(tmFutureLines ++.~ commandFutureLines s tm w)
(tmFutureLines ++.~ ss)
. (tmCommandHistory %~ take 10 . (s :))
. (tmStatus .~ TerminalTextInput "")
)
where
ss = fromMaybe [makeTermLine "ERROR: INPUT NOT RECOGNISED"] $ do
let args = words s
x <- args ^? ix 0
teff <- PTE.lookup x (getCommands tm)
let y = fromMaybe "" (args ^? ix 1)
PTE.lookup y teff
+1 -1
View File
@@ -10,6 +10,6 @@ import Control.Lens
termScreenColor :: Terminal -> Maybe Color
termScreenColor tm = case tm ^. tmStatus of
TerminalOff -> Nothing
TerminalTextInput _ _ -> Just green
TerminalTextInput _ -> Just green
TerminalPressTo{} -> Just green
TerminalBusy -> Just white
+71 -9
View File
@@ -1,7 +1,10 @@
{-# LANGUAGE TupleSections #-}
module Dodge.Update.Scroll (
updateWheelEvent,
) where
import Control.Applicative
import qualified Data.ListTrie.Patricia.Map.Enum as PTE
import Dodge.Data.Terminal.Status
import Dodge.Data.EquipType
import Padding
@@ -123,16 +126,34 @@ moveCombineSel yi =
return $ ci & ciSelection %~ scrollSelectionSections yi sss
terminalWheelEvent :: Int -> Int -> World -> World
--terminalWheelEvent yi tmid w
terminalWheelEvent _ tmid w
terminalWheelEvent yi tmid w
| w & has (input . mouseButtons . ix ButtonRight)
, Just TerminalTextInput{} <- w ^? cWorld . lWorld . terminals . ix tmid . tmStatus =
w -- & cWorld . lWorld . terminals . ix tmid %~ updatetermsubsel
w & cWorld . lWorld . terminals . ix tmid %~ g
| Just TerminalTextInput{} <- w ^? cWorld . lWorld . terminals . ix tmid . tmStatus =
w -- & cWorld . lWorld . terminals . ix tmid %~ updatetermsel
w & cWorld . lWorld . terminals . ix tmid %~ f
| otherwise = w
where
-- updatetermsel tm = case tm ^? tmInput . tiSel of
dowrap = if yi > 0 then wrapup else wrapdown
wrapup s coms = PTE.findSuccessor s coms <|> PTE.findMin coms
wrapdown s coms = PTE.findPredecessor s coms <|> PTE.findMax coms
f tm = fromMaybe tm $ do
let coms = getCommands tm
x <- tm ^? tmStatus . tiText
let s = fromMaybe "" $ x ^? to words . ix 0
(s',_) <- dowrap s coms
return $ tm & tmStatus . tiText .~ s'
g tm = fromMaybe tm $ do
let coms = getCommands tm
x <- tm ^? tmStatus . tiText
let s = fromMaybe "" $ x ^? to words . ix 0
y = fromMaybe "" $ x ^? to words . ix 1
-- (s',m) <- fmap (s,) (PTE.lookup s coms) <|> dowrap s coms
-- (arg,_) <- dowrap y m
(s',arg,_) <- if yi > 0 then doubleFindSucc s y coms <|> doubleFindMin coms
else doubleFindPred s y coms <|> doubleFindMax coms
return $ tm & tmStatus . tiText .~ s' ++ " " ++ arg
--case tm ^? tmInput . tiSel of
-- Nothing -> tm & tmInput . tiSel .~ (0, 0)
-- Just (i, _) ->
-- let newi = (i - yi) `mod` length (scrollCommandStrings w tm)
@@ -151,6 +172,47 @@ terminalWheelEvent _ tmid w
-- tc = scrollCommands tm !! i
-- arg = getArguments' tc tm w !! j
doubleFindMin :: (Enum a,Enum b) => PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a],[b],c)
doubleFindMin m = do
(x,n) <- PTE.findMin m
case PTE.findMin n of
Just (y,z) -> Just (x,y,z)
Nothing -> Nothing
doubleFindSucc :: (Enum a,Enum b) => [a] -> [b] -> PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a],[b],c)
doubleFindSucc xs ys m = case PTE.lookup xs m of
Just m' -> case PTE.findSuccessor ys m' of
Just (ys',z) -> Just (xs,ys',z)
Nothing -> dfs xs m
Nothing -> dfs xs m
where
dfs xs' m' = case PTE.findSuccessor xs' m' of
Just (xs'',n) -> case PTE.findMin n of
Just (ys',z) -> Just (xs'',ys',z)
Nothing -> dfs xs'' m'
Nothing -> Nothing
-- there are edge cases where this doesn't behave as might be expected
doubleFindMax :: (Enum a,Enum b) => PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a],[b],c)
doubleFindMax m = do
(x,n) <- PTE.findMax m
case PTE.findMax n of
Just (y,z) -> Just (x,y,z)
Nothing -> Nothing
doubleFindPred :: (Enum a,Enum b) => [a] -> [b] -> PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a],[b],c)
doubleFindPred xs ys m = case PTE.lookup xs m of
Just m' -> case PTE.findPredecessor ys m' of
Just (ys',z) -> Just (xs,ys',z)
Nothing -> dfs xs m
Nothing -> dfs xs m
where
dfs xs' m' = case PTE.findPredecessor xs' m' of
Just (xs'',n) -> case PTE.findMax n of
Just (ys',z) -> Just (xs'',ys',z)
Nothing -> dfs xs'' m'
Nothing -> Nothing
scrollRBOption :: Int -> Int -> Int -> Int
scrollRBOption dy ymax
| dy < 0 = min (ymax -1) . subtract dy
@@ -177,7 +239,7 @@ scrollRBOption dy ymax
-- , _tcEffect = TerminalCommandEffectNone -- \_ _ -> NoArguments []
-- }
getArguments :: TerminalCommand -> Terminal -> World -> [String]
getArguments tc tm w = case doTerminalCommandEffect (_tcEffect tc) tm w of
NoArguments{} -> []
OneArgument _ m -> map (' ' :) $ M.keys m
--getArguments :: TerminalCommand -> Terminal -> World -> [String]
--getArguments tc tm w = case doTerminalCommandEffect (_tcEffect tc) tm w of
-- NoArguments{} -> []
-- OneArgument _ m -> map (' ' :) $ M.keys m
+8 -5
View File
@@ -5,6 +5,7 @@ module Dodge.WorldEffect (
lineOutputTerminal,
) where
import qualified Data.ListTrie.Patricia.Map.Enum as PTE
--import Dodge.DoubleTree
import Dodge.Data.Terminal.Status
import Dodge.Item.Grammar
@@ -78,9 +79,6 @@ lineOutputTerminal tls =
defaultTerminal
{ _tmDisplayedLines = []
, _tmFutureLines = []
-- , _tmTitle = "TERMINAL"
, _tmCommands = [helpCommand,commandsCommand,quitCommand]
-- , _tmWriteCommands = [helpCommand, commandsCommand]
, _tmBootLines = connectionBlurbLines tls
, _tmDeathEffect = TmWdWdDoDeathTriggers
}
@@ -101,9 +99,14 @@ doTmWdWd tmwdwd = case tmwdwd of
TmTmSetStatus x -> \tm -> fromMaybe id $ do
tid <- tm ^? tmID
return $ cWorld . lWorld . terminals . ix tid . tmStatus .~ x
TmTmSetPartialCommand x -> \tm -> fromMaybe id $ do
TmDisplayCommands -> \tm -> fromMaybe id $ do
tid <- tm ^? tmID
return $ cWorld . lWorld . terminals . ix tid . tmPartialCommand .~ x
return $ cWorld . lWorld . terminals . ix tid . tmFutureLines .~
makeColorTermPara commandColor
(unwords (map fst (PTE.toList $ getCommands tm)))
-- TmTmSetPartialCommand x -> \tm -> fromMaybe id $ do
-- tid <- tm ^? tmID
-- return $ cWorld . lWorld . terminals . ix tid . tmPartialCommand .~ x
TmWdId -> const id
TmWdWdDisconnectTerminal -> disconnectTerminal
TmWdWdTermSound sid -> \tm w ->
+6 -6
View File
@@ -31,19 +31,19 @@ lookupTrie :: Ord a => [a] -> Trie a b -> Maybe b
lookupTrie (k : ks) t = _trieChildren t M.!? k >>= lookupTrie ks
lookupTrie [] t = _trieMVal t
--nextTrie :: Ord a => [a] -> Trie a b -> Maybe (b, Trie a b)
nextTrie :: [a] -> Trie a b -> Maybe (b, Trie a b)
nextTrie (k:ks) t = undefined
nextTrie [] t = Nothing
----nextTrie :: Ord a => [a] -> Trie a b -> Maybe (b, Trie a b)
--nextTrie :: [a] -> Trie a b -> Maybe (b, Trie a b)
--nextTrie (k:ks) t = undefined
--nextTrie [] t = Nothing
splitLookupTrie :: Ord a => [a] -> Trie a b -> (Trie a b,Maybe b,Trie a b)
splitLookupTrie (k:ks) t@(Trie x xs) = case m of
splitLookupTrie (k:ks) (Trie x xs) = case m of
Nothing -> (Trie x l,Nothing,Trie x r)
Just t' -> let (l',m',r') = splitLookupTrie ks t'
in (Trie x (M.insert k l' l),m', Trie x (M.insert k r' r))
where
(l,m,r) = M.splitLookup k xs
splitLookupTrie [] t@(Trie x xs) = (Trie Nothing mempty,x, Trie Nothing xs)
splitLookupTrie [] (Trie x xs) = (Trie Nothing mempty,x, Trie Nothing xs)
-- the above would be better if it removed empty trie strings; the left trie
-- will always be empty and the right trie might be empty.
-- I cannot think of a smart way to do this
+86 -89
View File
@@ -17,7 +17,7 @@
<$> src/Dodge/Data/Camera.hs 39;" o
<$> src/Dodge/Data/Creature.hs 80;" o
<$> src/Dodge/Data/LWorld.hs 184;" o
<$> src/Dodge/Data/Terminal.hs 95;" o
<$> src/Dodge/Data/Terminal.hs 106;" o
ABSOLUTE src/Dodge/Data/Item/Combine.hs 40;" C
AIUNIT src/Dodge/Data/Item/Combine.hs 75;" C
ALTERIFLE src/Dodge/Data/Item/Combine.hs 155;" C
@@ -392,7 +392,7 @@ Ears src/Dodge/Data/Creature/Perception.hs 47;" C
East src/Dodge/Data/CardinalPoint.hs 5;" C
East8 src/Dodge/Data/CardinalPoint.hs 13;" C
EdgeObstacle src/Dodge/Data/PathGraph.hs 48;" t
EffectArguments src/Dodge/Data/Terminal.hs 54;" t
EffectArguments src/Dodge/Data/Terminal.hs 55;" t
EighthRes src/Dodge/Data/Config.hs 97;" C
Eldritch src/Dodge/Data/Scenario.hs 34;" C
ElectricSensor src/Dodge/Data/Machine/Sensor/Type.hs 12;" C
@@ -846,7 +846,7 @@ NewIntMap src/NewInt.hs 18;" t
NewSideEffect src/Dodge/Data/Universe.hs 65;" C
NoAction src/Dodge/Data/ActionPlan.hs 152;" C
NoAmmoRequired src/Dodge/Data/Muzzle.hs 25;" C
NoArguments src/Dodge/Data/Terminal.hs 55;" C
NoArguments src/Dodge/Data/Terminal.hs 56;" C
NoBeamCombine src/Dodge/Data/Beam.hs 43;" C
NoConcurrentEffect src/Loop/Data.hs 7;" C
NoCrImp src/Dodge/Data/CreatureEffect.hs 24;" C
@@ -946,7 +946,7 @@ OnRightWrist src/Dodge/Data/Equipment/Misc.hs 26;" C
OnSpecial src/Dodge/Data/Equipment/Misc.hs 28;" C
OnTurret src/Dodge/Data/Item/Location.hs 37;" C
OnceSound src/Dodge/Data/SoundOrigin.hs 16;" C
OneArgument src/Dodge/Data/Terminal.hs 56;" C
OneArgument src/Dodge/Data/Terminal.hs 57;" C
OneHand src/Dodge/Data/AimStance.hs 9;" C
OnwardCluster src/Dodge/Data/RoomCluster.hs 14;" C
OnwardList src/Dodge/Annotation/Data.hs 16;" C
@@ -1309,6 +1309,9 @@ SwarmCrit src/Dodge/Data/Creature/Misc.hs 71;" C
SwitchToItem src/Dodge/Data/ActionPlan.hs 38;" C
TAPE src/Dodge/Data/Item/Combine.hs 56;" C
TARGETING src/Dodge/Data/Item/Combine.hs 22;" C
TCBase src/Dodge/Data/Terminal.hs 81;" C
TCInfo src/Dodge/Data/Terminal.hs 80;" C
TCom src/Dodge/Data/Terminal.hs 80;" t
TESLAGUN src/Dodge/Data/Item/Combine.hs 169;" C
THERMOMETER src/Dodge/Data/Item/Combine.hs 85;" C
THREELINES src/Dodge/Data/GenParams.hs 20;" C
@@ -1316,7 +1319,7 @@ TIMESCROLLER src/Dodge/Data/Item/Combine.hs 144;" C
TIMESTOPPER src/Dodge/Data/Item/Combine.hs 143;" C
TIN src/Dodge/Data/Item/Combine.hs 58;" C
TINMAG src/Dodge/Data/Item/Combine.hs 108;" C
TLine src/Dodge/Data/Terminal.hs 43;" C
TLine src/Dodge/Data/Terminal.hs 44;" C
TO src/Shader/Data.hs 59;" t
TORCH src/Dodge/Data/Item/Combine.hs 176;" C
TRACTORGUN src/Dodge/Data/Item/Combine.hs 170;" C
@@ -1340,28 +1343,28 @@ TargetingLaser src/Dodge/Data/Laser.hs 18;" C
TargetingType src/Dodge/Data/Item/Targeting.hs 11;" t
TeleSound src/Dodge/Data/SoundOrigin.hs 36;" C
TermSignal src/Dodge/Data/Input.hs 54;" t
Terminal src/Dodge/Data/Terminal.hs 25;" t
Terminal src/Dodge/Data/Terminal.hs 26;" t
TerminalBusy src/Dodge/Data/Terminal/Status.hs 12;" C
TerminalCommand src/Dodge/Data/Terminal.hs 72;" t
TerminalCommandArguments src/Dodge/Data/Terminal.hs 62;" C
TerminalCommandEffect src/Dodge/Data/Terminal.hs 61;" t
TerminalCommandEffectCommands src/Dodge/Data/Terminal.hs 68;" C
TerminalCommandEffectDamageCoding src/Dodge/Data/Terminal.hs 63;" C
TerminalCommandEffectHelp src/Dodge/Data/Terminal.hs 66;" C
TerminalCommandEffectLinkedObject src/Dodge/Data/Terminal.hs 65;" C
TerminalCommandEffectNoArgumentsStr src/Dodge/Data/Terminal.hs 67;" C
TerminalCommandEffectNone src/Dodge/Data/Terminal.hs 70;" C
TerminalCommandEffectSensorParameter src/Dodge/Data/Terminal.hs 64;" C
TerminalCommandEffectSingleCommand src/Dodge/Data/Terminal.hs 69;" C
TerminalLine src/Dodge/Data/Terminal.hs 43;" t
TerminalLineConst src/Dodge/Data/Terminal.hs 41;" C
TerminalLineString src/Dodge/Data/Terminal.hs 41;" t
TerminalCommand src/Dodge/Data/Terminal.hs 73;" t
TerminalCommandArguments src/Dodge/Data/Terminal.hs 63;" C
TerminalCommandEffect src/Dodge/Data/Terminal.hs 62;" t
TerminalCommandEffectCommands src/Dodge/Data/Terminal.hs 69;" C
TerminalCommandEffectDamageCoding src/Dodge/Data/Terminal.hs 64;" C
TerminalCommandEffectHelp src/Dodge/Data/Terminal.hs 67;" C
TerminalCommandEffectLinkedObject src/Dodge/Data/Terminal.hs 66;" C
TerminalCommandEffectNoArgumentsStr src/Dodge/Data/Terminal.hs 68;" C
TerminalCommandEffectNone src/Dodge/Data/Terminal.hs 71;" C
TerminalCommandEffectSensorParameter src/Dodge/Data/Terminal.hs 65;" C
TerminalCommandEffectSingleCommand src/Dodge/Data/Terminal.hs 70;" C
TerminalLine src/Dodge/Data/Terminal.hs 44;" t
TerminalLineConst src/Dodge/Data/Terminal.hs 42;" C
TerminalLineString src/Dodge/Data/Terminal.hs 42;" t
TerminalOff src/Dodge/Data/Terminal/Status.hs 11;" C
TerminalPressTo src/Dodge/Data/Terminal/Status.hs 14;" C
TerminalSound src/Dodge/Data/SoundOrigin.hs 24;" C
TerminalStatus src/Dodge/Data/Terminal/Status.hs 10;" t
TerminalTextInput src/Dodge/Data/Terminal/Status.hs 13;" C
TerminalToggle src/Dodge/Data/Terminal.hs 49;" t
TerminalToggle src/Dodge/Data/Terminal.hs 50;" t
Terrestrial src/Dodge/Data/Scenario.hs 72;" C
TerrestrialBiome src/Dodge/Data/Scenario.hs 76;" t
TeslaArc src/Dodge/Data/TeslaArc.hs 17;" t
@@ -1373,15 +1376,15 @@ Tile src/Data/Tile.hs 16;" t
Tiled src/Data/Tile.hs 14;" C
TimeFlowStatus src/Dodge/Data/World.hs 58;" t
Tiny src/Shape/Data.hs 32;" C
TmTmClearDisplayedLines src/Dodge/Data/Terminal.hs 85;" C
TmTmSetPartialCommand src/Dodge/Data/Terminal.hs 87;" C
TmTmSetStatus src/Dodge/Data/Terminal.hs 86;" C
TmWdId src/Dodge/Data/Terminal.hs 80;" C
TmWdWd src/Dodge/Data/Terminal.hs 79;" t
TmWdWdDisconnectTerminal src/Dodge/Data/Terminal.hs 81;" C
TmWdWdDoDeathTriggers src/Dodge/Data/Terminal.hs 84;" C
TmWdWdTermSound src/Dodge/Data/Terminal.hs 83;" C
TmWdWdfromWdWd src/Dodge/Data/Terminal.hs 82;" C
TmDisplayCommands src/Dodge/Data/Terminal.hs 96;" C
TmTmClearDisplayedLines src/Dodge/Data/Terminal.hs 94;" C
TmTmSetStatus src/Dodge/Data/Terminal.hs 95;" C
TmWdId src/Dodge/Data/Terminal.hs 89;" C
TmWdWd src/Dodge/Data/Terminal.hs 88;" t
TmWdWdDisconnectTerminal src/Dodge/Data/Terminal.hs 90;" C
TmWdWdDoDeathTriggers src/Dodge/Data/Terminal.hs 93;" C
TmWdWdTermSound src/Dodge/Data/Terminal.hs 92;" C
TmWdWdfromWdWd src/Dodge/Data/Terminal.hs 91;" C
ToContinueStart src/Sound/Data.hs 27;" C
ToPlaySound src/Sound/Data.hs 35;" t
ToStart src/Sound/Data.hs 26;" C
@@ -1560,8 +1563,8 @@ _apStrategy src/Dodge/Data/ActionPlan.hs 21;" f
_aps src/Dodge/Data/Muzzle.hs 22;" f
_arbitraryAction src/Dodge/Data/ActionPlan.hs 167;" f
_arcNode src/Dodge/Data/LWorld.hs 117;" f
_argList src/Dodge/Data/Terminal.hs 58;" f
_argType src/Dodge/Data/Terminal.hs 57;" f
_argList src/Dodge/Data/Terminal.hs 59;" f
_argType src/Dodge/Data/Terminal.hs 58;" f
_asDir src/Dodge/Data/ArcStep.hs 16;" f
_asObject src/Dodge/Data/ArcStep.hs 17;" f
_asPos src/Dodge/Data/ArcStep.hs 15;" f
@@ -1694,7 +1697,7 @@ _cloudEBO src/Data/Preload/Render.hs 51;" f
_cloudShader src/Data/Preload/Render.hs 50;" f
_cloudVBO src/Data/Preload/Render.hs 49;" f
_clouds src/Dodge/Data/LWorld.hs 103;" f
_cmdEffect src/Dodge/Data/Terminal.hs 55;" f
_cmdEffect src/Dodge/Data/Terminal.hs 56;" f
_colorBlurShader src/Data/Preload/Render.hs 22;" f
_coolEnd src/Dodge/Data/TriggerType.hs 17;" f
_coolSound src/Dodge/Data/Item/Params.hs 24;" f
@@ -2417,17 +2420,16 @@ _tbPos src/Dodge/Data/TractorBeam.hs 14;" f
_tbStartPos src/Dodge/Data/TractorBeam.hs 15;" f
_tbTime src/Dodge/Data/TractorBeam.hs 17;" f
_tbVel src/Dodge/Data/TractorBeam.hs 16;" f
_tcAlias src/Dodge/Data/Terminal.hs 74;" f
_tcEffect src/Dodge/Data/Terminal.hs 76;" f
_tcHelp src/Dodge/Data/Terminal.hs 75;" f
_tcString src/Dodge/Data/Terminal.hs 73;" f
_tcAlias src/Dodge/Data/Terminal.hs 75;" f
_tcEffect src/Dodge/Data/Terminal.hs 77;" f
_tcHelp src/Dodge/Data/Terminal.hs 76;" f
_tcString src/Dodge/Data/Terminal.hs 74;" f
_termID src/Dodge/Data/HUD.hs 42;" f
_terminals src/Dodge/Data/LWorld.hs 128;" f
_teslaArcs src/Dodge/Data/LWorld.hs 116;" f
_testFloat src/Dodge/Data/World.hs 43;" f
_textInput src/Dodge/Data/Input.hs 49;" f
_textureObject src/Shader/Data.hs 95;" f
_tiSel src/Dodge/Data/Terminal/Status.hs 13;" f
_tiText src/Dodge/Data/Terminal/Status.hs 13;" f
_tileArrayZ src/Data/Tile.hs 24;" f
_tilePoly src/Data/Tile.hs 17;" f
@@ -2436,22 +2438,21 @@ _tileZero src/Data/Tile.hs 19;" f
_tiles src/Data/Tile.hs 14;" f
_timeFlow src/Dodge/Data/World.hs 38;" f
_timeFlowCharge src/Dodge/Data/World.hs 78;" f
_tlEffect src/Dodge/Data/Terminal.hs 46;" f
_tlPause src/Dodge/Data/Terminal.hs 44;" f
_tlString src/Dodge/Data/Terminal.hs 45;" f
_tmBootLines src/Dodge/Data/Terminal.hs 27;" f
_tmButtonID src/Dodge/Data/Terminal.hs 28;" f
_tmCommandHistory src/Dodge/Data/Terminal.hs 36;" f
_tmDeathEffect src/Dodge/Data/Terminal.hs 34;" f
_tmDisplayedLines src/Dodge/Data/Terminal.hs 31;" f
_tmExternalColor src/Dodge/Data/Terminal.hs 30;" f
_tmFutureLines src/Dodge/Data/Terminal.hs 32;" f
_tmID src/Dodge/Data/Terminal.hs 26;" f
_tmMachineID src/Dodge/Data/Terminal.hs 29;" f
_tmPartialCommand src/Dodge/Data/Terminal.hs 38;" f
_tmScrollCommands src/Dodge/Data/Terminal.hs 33;" f
_tmStatus src/Dodge/Data/Terminal.hs 35;" f
_tmToggles src/Dodge/Data/Terminal.hs 37;" f
_tlEffect src/Dodge/Data/Terminal.hs 47;" f
_tlPause src/Dodge/Data/Terminal.hs 45;" f
_tlString src/Dodge/Data/Terminal.hs 46;" f
_tmBootLines src/Dodge/Data/Terminal.hs 28;" f
_tmButtonID src/Dodge/Data/Terminal.hs 29;" f
_tmCommandHistory src/Dodge/Data/Terminal.hs 37;" f
_tmCommands src/Dodge/Data/Terminal.hs 34;" f
_tmDeathEffect src/Dodge/Data/Terminal.hs 35;" f
_tmDisplayedLines src/Dodge/Data/Terminal.hs 32;" f
_tmExternalColor src/Dodge/Data/Terminal.hs 31;" f
_tmFutureLines src/Dodge/Data/Terminal.hs 33;" f
_tmID src/Dodge/Data/Terminal.hs 27;" f
_tmMachineID src/Dodge/Data/Terminal.hs 30;" f
_tmStatus src/Dodge/Data/Terminal.hs 36;" f
_tmToggles src/Dodge/Data/Terminal.hs 38;" f
_toPlaySoundChunkID src/Sound/Data.hs 41;" f
_toPlaySoundPos src/Sound/Data.hs 38;" f
_toPlaySoundStatus src/Sound/Data.hs 37;" f
@@ -2465,8 +2466,8 @@ _tractorBeams src/Dodge/Data/LWorld.hs 123;" f
_trieChildren src/SimpleTrie.hs 12;" f
_trieMVal src/SimpleTrie.hs 11;" f
_triggers src/Dodge/Data/LWorld.hs 133;" f
_ttDeathEffect src/Dodge/Data/Terminal.hs 51;" f
_ttTriggerID src/Dodge/Data/Terminal.hs 50;" f
_ttDeathEffect src/Dodge/Data/Terminal.hs 52;" f
_ttTriggerID src/Dodge/Data/Terminal.hs 51;" f
_tuDir src/Dodge/Data/Machine.hs 61;" f
_tuFireTime src/Dodge/Data/Machine.hs 60;" f
_tuTurnSpeed src/Dodge/Data/Machine.hs 59;" f
@@ -2694,7 +2695,6 @@ arcStepwisePositive src/Geometry.hs 343;" f
arcTest src/Picture/Test.hs 9;" f
arcTest' src/Picture/Test.hs 21;" f
argV src/Geometry/Vector.hs 80;" f
argumentHelp src/Dodge/Terminal.hs 146;" f
armourChaseCrit src/Dodge/Creature/ArmourChase.hs 35;" f
armouredChasers src/Dodge/Room/Boss.hs 63;" f
armouredCorridor src/Dodge/Room/RoadBlock.hs 20;" f
@@ -2762,7 +2762,7 @@ basicItemDisplay src/Dodge/Item/Display.hs 23;" f
basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f
basicMachineUpdate src/Dodge/Machine.hs 13;" f
basicMuzFlare src/Dodge/HeldUse.hs 709;" f
basicTerminal src/Dodge/Terminal.hs 37;" f
basicTerminal src/Dodge/Terminal.hs 38;" f
battery src/Dodge/Item/Ammo.hs 63;" f
batteryPack src/Dodge/Item/Equipment.hs 46;" f
belowNumX src/Dodge/Combine/Graph.hs 86;" f
@@ -2978,9 +2978,8 @@ combineList src/Dodge/Combine.hs 20;" f
combineRooms src/Dodge/Room/Procedural.hs 152;" f
combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 480;" f
combineTree src/Dodge/Tree/Compose.hs 66;" f
commandColor src/Dodge/Terminal.hs 127;" f
commandFutureLines src/Dodge/Terminal.hs 251;" f
commandsCommand src/Dodge/Terminal.hs 94;" f
commandColor src/Dodge/Terminal.hs 143;" f
commandsCommand src/Dodge/Terminal.hs 125;" f
commonPrefix src/Dodge/Debug/Terminal.hs 146;" f
comp src/Quaternion.hs 65;" f
compactDraw src/Dodge/LevelGen.hs 91;" f
@@ -2994,8 +2993,8 @@ conEffects src/Dodge/Concurrent.hs 12;" f
conLDTToConDT src/Dodge/DoubleTree.hs 22;" f
concurrentIS src/Dodge/Update/Input/InGame.hs 291;" f
connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 722;" f
connectionBlurb src/Dodge/Terminal.hs 103;" f
connectionBlurbLines src/Dodge/Terminal.hs 49;" f
connectionBlurb src/Dodge/Terminal.hs 99;" f
connectionBlurbLines src/Dodge/Terminal.hs 45;" f
constructEdges src/Polyhedra.hs 34;" f
constructEdgesList src/Polyhedra.hs 43;" f
contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 57;" f
@@ -3120,7 +3119,7 @@ dShadCol src/Dodge/Render/List.hs 215;" f
damMatSideEffect src/Dodge/Material/Damage.hs 13;" f
damThingHitWith src/Dodge/Damage.hs 72;" f
damToExpBarrel src/Dodge/Barreloid.hs 49;" f
damageCodeCommand src/Dodge/Terminal.hs 227;" f
damageCodeCommand src/Dodge/Terminal.hs 243;" f
damageCrWl src/Dodge/Damage.hs 29;" f
damageCrWlID src/Dodge/Damage.hs 23;" f
damageDirection src/Dodge/Damage.hs 35;" f
@@ -3161,7 +3160,7 @@ debugMenuOptions src/Dodge/Menu.hs 122;" f
debugOn src/Dodge/Data/Config.hs 151;" f
debugSelectCreatureList src/Dodge/Debug.hs 86;" f
debugSelectCreatureMessage src/Dodge/Debug.hs 77;" f
decodedtmap src/Dodge/Terminal.hs 200;" f
decodedtmap src/Dodge/Terminal.hs 216;" f
decomposeSelfTree src/Dodge/Tree/Compose.hs 60;" f
decomposeTree src/Dodge/Tree/Compose.hs 57;" f
decoratedBlock src/Dodge/Placement/Instance/Block.hs 10;" f
@@ -3261,7 +3260,7 @@ dim src/Color.hs 112;" f
dirtColor src/Dodge/Default/Wall.hs 81;" f
dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f
disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 650;" f
disconnectTerminal src/Dodge/Terminal.hs 212;" f
disconnectTerminal src/Dodge/Terminal.hs 228;" f
displayConfig src/Dodge/Menu.hs 213;" f
displayControls src/Dodge/Menu.hs 223;" f
displayFrameTicks src/Dodge/Render/Picture.hs 45;" f
@@ -3345,7 +3344,6 @@ doScopeZoom src/Dodge/Update/Scroll.hs 85;" f
doSectionSize src/Dodge/DisplayInventory.hs 217;" f
doSideEffects appDodge/Main.hs 120;" f
doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 166;" f
doTerminalCommandEffect src/Dodge/Terminal.hs 130;" f
doTestDrawing src/Dodge/Render.hs 41;" f
doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f
doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f
@@ -3570,7 +3568,7 @@ errorNormalizeV src/Geometry.hs 55;" f
errorPointInPolygon src/Geometry.hs 47;" f
evaluateRandPS src/Dodge/Placement/PlaceSpot.hs 150;" f
evenOddSplit src/Dodge/Base.hs 160;" f
exitTerminalSubInv src/Dodge/Terminal.hs 220;" f
exitTerminalSubInv src/Dodge/Terminal.hs 236;" f
expandLine src/Dodge/Picture.hs 30;" f
expandPolyBy src/Dodge/LevelGen/StaticWalls.hs 91;" f
expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f
@@ -3701,17 +3699,16 @@ geometryUnitTests test/Spec.hs 22;" f
geqConstr src/SameConstr.hs 21;" f
getAimZoom src/Dodge/Update/Camera.hs 136;" f
getAmmoLinks src/Dodge/Item/Grammar.hs 103;" f
getArguments src/Dodge/Update/Scroll.hs 180;" f
getAttachedSFLink src/Dodge/HeldUse.hs 764;" f
getAutoSpringLinks src/Dodge/Item/Grammar.hs 84;" f
getAvailableListLines src/Dodge/SelectionList.hs 10;" f
getBulHitDams src/Dodge/Bullet.hs 169;" f
getBulletType src/Dodge/HeldUse.hs 943;" f
getCloseObj src/Dodge/Update/Input/InGame.hs 516;" f
getCommands src/Dodge/Terminal.hs 112;" f
getCommandsHelp src/Dodge/Terminal.hs 76;" f
getCommand src/Dodge/Terminal.hs 111;" f
getCommands src/Dodge/Terminal.hs 108;" f
getCrMoveSpeed src/Dodge/Creature/Statistics.hs 45;" f
getDamageCoding src/Dodge/Terminal.hs 172;" f
getDamageCoding src/Dodge/Terminal.hs 188;" f
getDistortions src/Dodge/Render.hs 435;" f
getEquipmentAllocation src/Dodge/Inventory/RBList.hs 47;" f
getGrenadeHitEffect src/Dodge/HeldUse.hs 1310;" f
@@ -3729,7 +3726,7 @@ getPretty src/AesonHelp.hs 8;" f
getPromptTM src/Dodge/Terminal/Type.hs 6;" f
getRootItemBounds src/Dodge/Render/HUD.hs 96;" f
getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f
getSensor src/Dodge/Terminal.hs 184;" f
getSensor src/Dodge/Terminal.hs 200;" f
getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f
getSplitString src/Dodge/Debug/Terminal.hs 126;" f
getTiles src/Dodge/Layout.hs 208;" f
@@ -3829,8 +3826,9 @@ heldItemWeight src/Dodge/Creature/Statistics.hs 72;" f
heldPositionInfo src/Dodge/Item/Info.hs 241;" f
heldTorqueAmount src/Dodge/HeldUse.hs 584;" f
heldTriggerType src/Dodge/BaseTriggerType.hs 27;" f
helpCommand src/Dodge/Terminal.hs 67;" f
helpCommand src/Dodge/Terminal.hs 116;" f
helpPoly3D src/Polyhedra.hs 125;" f
helpStrings src/Dodge/Terminal.hs 119;" f
heron src/Geometry.hs 221;" f
hiToFloat src/Dodge/Room/Modify/Girder.hs 171;" f
highBar src/Dodge/Room/Foreground.hs 89;" f
@@ -4179,8 +4177,8 @@ makeBullet src/Dodge/HeldUse.hs 1021;" f
makeButton src/Dodge/LevelGen/Switch.hs 16;" f
makeByteStringShaderUsingVAO src/Shader/Compile.hs 128;" f
makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f
makeColorTermLine src/Dodge/Terminal.hs 124;" f
makeColorTermPara src/Dodge/Terminal.hs 121;" f
makeColorTermLine src/Dodge/Terminal.hs 140;" f
makeColorTermPara src/Dodge/Terminal.hs 137;" f
makeCorpse src/Dodge/Corpse/Make.hs 13;" f
makeDebris src/Dodge/Block/Debris.hs 45;" f
makeDebrisDirected src/Dodge/Block/Debris.hs 48;" f
@@ -4216,8 +4214,8 @@ makeSourcedShader src/Shader/Compile.hs 167;" f
makeSpark src/Dodge/Spark.hs 45;" f
makeSubmenuOption src/Dodge/Menu/OptionType.hs 19;" f
makeSwitch src/Dodge/LevelGen/Switch.hs 38;" f
makeTermLine src/Dodge/Terminal.hs 115;" f
makeTermPara src/Dodge/Terminal.hs 118;" f
makeTermLine src/Dodge/Terminal.hs 131;" f
makeTermPara src/Dodge/Terminal.hs 134;" f
makeTeslaArc src/Dodge/Tesla.hs 29;" f
makeTeslaExplosionAt src/Dodge/WorldEvent/Explosion.hs 40;" f
makeTileFromPoly src/Tile.hs 34;" f
@@ -4377,7 +4375,6 @@ newSounds src/Dodge/Creature/Perception.hs 171;" f
newTextureFramebuffer src/Framebuffer/Setup.hs 16;" f
nextArc src/Dodge/Tesla.hs 61;" f
nextInSectionSS src/Dodge/SelectionSections.hs 36;" f
nextTrie src/SimpleTrie.hs 35;" f
noPic src/ShapePicture.hs 25;" f
noShape src/ShapePicture.hs 29;" f
noclipCheck src/Dodge/WallCreatureCollisions.hs 22;" f
@@ -4698,7 +4695,7 @@ qToV2 src/Quaternion.hs 56;" f
qToV3 src/Quaternion.hs 53;" f
quarterRoomSquare src/Dodge/Room/Procedural.hs 213;" f
quarterRoomTri src/Dodge/Room/Procedural.hs 177;" f
quitCommand src/Dodge/Terminal.hs 58;" f
quitCommand src/Dodge/Terminal.hs 128;" f
qz src/Quaternion.hs 71;" f
rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f
rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f
@@ -4886,7 +4883,7 @@ rprShift src/Dodge/PlacementSpot.hs 102;" f
rsObjectColor src/Dodge/RadarSweep/Draw.hs 34;" f
runPastStart src/Dodge/Room/Start.hs 71;" f
runStateWorld src/Dodge/Randify.hs 17;" f
runTerminalString src/Dodge/Terminal.hs 284;" f
runTerminalInput src/Dodge/Terminal.hs 297;" f
sPS src/Dodge/LevelGen/PlacementHelper.hs 27;" f
safeAngleVV src/Geometry/Vector.hs 68;" f
safeArgV src/Geometry/Vector.hs 87;" f
@@ -4956,8 +4953,8 @@ selectedItemScroll src/Dodge/Update/Scroll.hs 47;" f
sensAboveDoor src/Dodge/Room/SensorDoor.hs 63;" f
sensInsideDoor src/Dodge/Room/SensorDoor.hs 69;" f
senseDamage src/Dodge/Machine/Update.hs 160;" f
sensorCommand src/Dodge/Terminal.hs 203;" f
sensorInfoMap src/Dodge/Terminal.hs 175;" f
sensorCommand src/Dodge/Terminal.hs 219;" f
sensorInfoMap src/Dodge/Terminal.hs 191;" f
sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f
sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 48;" f
sensorSPic src/Dodge/Machine/Draw.hs 70;" f
@@ -5093,7 +5090,7 @@ shuffleRoomPos src/Dodge/Layout.hs 78;" f
shuffleTail src/RandomHelp.hs 59;" f
sigmoid src/Dodge/Base.hs 151;" f
simpleCrSprings src/Dodge/Update.hs 888;" f
simpleTermMessage src/Dodge/Terminal.hs 248;" f
simpleTermMessage src/Dodge/Terminal.hs 264;" f
sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 680;" f
sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 472;" f
singleAmmo src/Dodge/Item/AmmoSlots.hs 62;" f
@@ -5269,10 +5266,10 @@ telRoomLev src/Dodge/Room/Teleport.hs 14;" f
teleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 528;" f
termButton src/Dodge/Placement/Instance/Terminal.hs 51;" f
termScreenColor src/Dodge/Terminal/Color.hs 10;" f
termSoundLine src/Dodge/Terminal.hs 106;" f
termTextColor src/Dodge/Terminal.hs 109;" f
termSoundLine src/Dodge/Terminal.hs 102;" f
termTextColor src/Dodge/Terminal.hs 105;" f
terminalColor src/Dodge/Placement/Instance/Terminal.hs 61;" f
terminalReturnEffect src/Dodge/Terminal.hs 271;" f
terminalReturnEffect src/Dodge/Terminal.hs 287;" f
terminalSPic src/Dodge/Machine/Draw.hs 29;" f
terminalScreenGlow src/Dodge/Machine/Update.hs 35;" f
terminalShape src/Dodge/Machine/Draw.hs 32;" f
@@ -5339,12 +5336,12 @@ toV2 src/Geometry/Data.hs 54;" f
toV3 src/Geometry/Data.hs 57;" f
toV4 src/Geometry/Data.hs 60;" f
toggleCombineInv src/Dodge/DisplayInventory.hs 317;" f
toggleCommand src/Dodge/Terminal.hs 191;" f
toggleCommand src/Dodge/Terminal.hs 207;" f
toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 65;" f
toggleExamineInv src/Dodge/Creature/Impulse/UseItem.hs 103;" f
toggleJust src/MaybeHelp.hs 41;" f
toggleMapperInv src/Dodge/Creature/Impulse/UseItem.hs 108;" f
togglesToEffects src/Dodge/Terminal.hs 243;" f
togglesToEffects src/Dodge/Terminal.hs 259;" f
tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 642;" f
tone440raiseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 664;" f
tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 606;" f