Work on terminals: allow scrolling to get default inputs
This commit is contained in:
+20
-8
@@ -137,6 +137,7 @@ data World = World
|
|||||||
, _timeFlow :: TimeFlowStatus
|
, _timeFlow :: TimeFlowStatus
|
||||||
, _worldClock :: Int
|
, _worldClock :: Int
|
||||||
, _doubleMouseHammer :: HammerPosition
|
, _doubleMouseHammer :: HammerPosition
|
||||||
|
, _backspaceTimer :: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
data HUDElement
|
data HUDElement
|
||||||
@@ -386,22 +387,23 @@ data TerminalParams = NoTerminalParams | TerminalParams
|
|||||||
, _termFutureLines :: [TerminalLine]
|
, _termFutureLines :: [TerminalLine]
|
||||||
, _termMaxLines :: Int
|
, _termMaxLines :: Int
|
||||||
, _termTitle :: String
|
, _termTitle :: String
|
||||||
, _termSel :: Maybe Int
|
, _termSel :: Maybe (Int,Int)
|
||||||
, _termOptions :: [(String, World -> World)]
|
-- , _termOptions :: [(String, World -> World)]
|
||||||
, _termInput :: Maybe (T.Text, String -> World -> World)
|
, _termInput :: Maybe T.Text
|
||||||
|
, _termCommands :: [TerminalCommand]
|
||||||
}
|
}
|
||||||
data TerminalLine
|
data TerminalLine
|
||||||
= TerminalLineDisplay
|
= TerminalLineDisplay
|
||||||
{_tlPause :: Int
|
{_tlPause :: Int
|
||||||
,_tlString :: World -> (String, Color)
|
,_tlString :: World -> (String, Color)
|
||||||
}
|
}
|
||||||
| TerminalLineChoice
|
-- | TerminalLineChoice
|
||||||
{_tlPause :: Int
|
-- {_tlPause :: Int
|
||||||
,_tlOptions :: [(String,World -> World)]
|
-- ,_tlOptions :: [(String,World -> World)]
|
||||||
}
|
-- }
|
||||||
| TerminalLineInput
|
| TerminalLineInput
|
||||||
{_tlPause :: Int
|
{_tlPause :: Int
|
||||||
,_tlInputFunction :: String -> World -> World
|
,_tlCommands :: [TerminalCommand]
|
||||||
}
|
}
|
||||||
| TerminalLineEffect
|
| TerminalLineEffect
|
||||||
{_tlPause :: Int
|
{_tlPause :: Int
|
||||||
@@ -1316,6 +1318,15 @@ data CreatureState = CrSt
|
|||||||
, _crDropsOnDeath :: CreatureDropType
|
, _crDropsOnDeath :: CreatureDropType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data TerminalCommand = TerminalCommand
|
||||||
|
{ _tcString :: String
|
||||||
|
, _tcAlias :: [String]
|
||||||
|
, _tcHelp :: String
|
||||||
|
, _tcArgumentType :: Maybe String
|
||||||
|
, _tcArguments :: World -> [String]
|
||||||
|
, _tcEffect :: [String] -> World -> Either String World
|
||||||
|
}
|
||||||
|
|
||||||
makeLenses ''CreatureState
|
makeLenses ''CreatureState
|
||||||
makeLenses ''Damage
|
makeLenses ''Damage
|
||||||
makeLenses ''DamageEffect
|
makeLenses ''DamageEffect
|
||||||
@@ -1381,3 +1392,4 @@ makeLenses ''RightButtonOptions
|
|||||||
makeLenses ''AllocateEquipment
|
makeLenses ''AllocateEquipment
|
||||||
makeLenses ''ActivateEquipment
|
makeLenses ''ActivateEquipment
|
||||||
makeLenses ''EquipParams
|
makeLenses ''EquipParams
|
||||||
|
makeLenses ''TerminalCommand
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ defaultWorld = World
|
|||||||
, _rewindWorlds = []
|
, _rewindWorlds = []
|
||||||
, _timeFlow = NormalTimeFlow
|
, _timeFlow = NormalTimeFlow
|
||||||
, _doubleMouseHammer = HammerUp
|
, _doubleMouseHammer = HammerUp
|
||||||
|
, _backspaceTimer = 0
|
||||||
}
|
}
|
||||||
youLight :: TempLightSource
|
youLight :: TempLightSource
|
||||||
youLight =
|
youLight =
|
||||||
|
|||||||
+45
-23
@@ -12,32 +12,34 @@ Instead we store the events in a set, and deal with the combinations in
|
|||||||
module Dodge.Event
|
module Dodge.Event
|
||||||
( handleEvent
|
( handleEvent
|
||||||
) where
|
) where
|
||||||
import Dodge.Combine
|
import Dodge.Terminal
|
||||||
import Dodge.Event.Keyboard
|
import Dodge.Combine
|
||||||
|
import Dodge.Event.Keyboard
|
||||||
--import Dodge.Event.Menu
|
--import Dodge.Event.Menu
|
||||||
import Dodge.Base
|
import Dodge.Base
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
--import Dodge.Base.Window
|
--import Dodge.Base.Window
|
||||||
import Dodge.PreloadData
|
import Dodge.PreloadData
|
||||||
--import Dodge.Creature.Action
|
--import Dodge.Creature.Action
|
||||||
import Dodge.Inventory
|
import Dodge.Inventory
|
||||||
import Dodge.Inventory.Add
|
import Dodge.Inventory.Add
|
||||||
import Dodge.SoundLogic
|
import Dodge.SoundLogic
|
||||||
--import Geometry
|
--import Geometry
|
||||||
--import Preload.Update
|
--import Preload.Update
|
||||||
import Dodge.FloorItem
|
import Dodge.FloorItem
|
||||||
import qualified IntMapHelp as IM
|
import qualified IntMapHelp as IM
|
||||||
import ListHelp
|
import ListHelp
|
||||||
|
|
||||||
--import Data.Monoid
|
--import Data.Monoid
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
--import Data.Maybe
|
--import Data.Maybe
|
||||||
--import Data.Char
|
--import Data.Char
|
||||||
--import Data.List
|
--import Data.List
|
||||||
--import Data.Function (on)
|
--import Data.Function (on)
|
||||||
import qualified Data.Set as S
|
import qualified Data.Set as S
|
||||||
import SDL
|
import qualified Data.Text as T
|
||||||
|
import SDL
|
||||||
|
|
||||||
handleEvent :: Event -> Universe -> IO (Maybe Universe)
|
handleEvent :: Event -> Universe -> IO (Maybe Universe)
|
||||||
handleEvent e = case eventPayload e of
|
handleEvent e = case eventPayload e of
|
||||||
@@ -92,13 +94,14 @@ handlePressedMouseButton :: MouseButton -> Universe -> Maybe Universe
|
|||||||
handlePressedMouseButton but w = case (_hudElement (_hud $ _uvWorld w), but) of
|
handlePressedMouseButton but w = case (_hudElement (_hud $ _uvWorld w), but) of
|
||||||
(DisplayCarte,_) -> Just $ w & uvWorld . clickMousePos .~ _mousePos (_uvWorld w)
|
(DisplayCarte,_) -> Just $ w & uvWorld . clickMousePos .~ _mousePos (_uvWorld w)
|
||||||
(_,ButtonMiddle) -> Just $ w & uvWorld . clickMousePos .~ _mousePos (_uvWorld w)
|
(_,ButtonMiddle) -> Just $ w & uvWorld . clickMousePos .~ _mousePos (_uvWorld w)
|
||||||
( DisplayInventory (DisplayTerminal tp _) , ButtonLeft)
|
( DisplayInventory (DisplayTerminal _ _) , ButtonLeft)
|
||||||
-> Just $ fromMaybe w
|
-> Just $ over uvWorld doTerminalEffect w
|
||||||
$ do -- ugly
|
-- -> Just $ fromMaybe w
|
||||||
i <- _termSel tp
|
-- $ do -- ugly
|
||||||
f <- _termOptions tp !? i
|
-- i <- _termSel tp
|
||||||
return $ w & uvWorld %~ snd f
|
-- f <- _termOptions tp !? i
|
||||||
-- & uvWorld . hud . hudElement .~ DisplayInventory NoSubInventory
|
-- return $ w & uvWorld %~ snd f
|
||||||
|
---- & uvWorld . hud . hudElement .~ DisplayInventory NoSubInventory
|
||||||
( DisplayInventory (CombineInventory mi) , ButtonLeft)
|
( DisplayInventory (CombineInventory mi) , ButtonLeft)
|
||||||
-> Just $ fromMaybe (w & uvWorld . hud . hudElement .~ DisplayInventory NoSubInventory)
|
-> Just $ fromMaybe (w & uvWorld . hud . hudElement .~ DisplayInventory NoSubInventory)
|
||||||
$ do -- ugly
|
$ do -- ugly
|
||||||
@@ -147,11 +150,30 @@ wheelEvent y w = case _hudElement $ _hud w of
|
|||||||
| otherwise -> w & moveTweakSel yi
|
| otherwise -> w & moveTweakSel yi
|
||||||
DisplayInventory (CombineInventory _) -> w
|
DisplayInventory (CombineInventory _) -> w
|
||||||
& hud . hudElement . subInventory . combineInvSel . _Just %~ ((`mod` numcombs) . subtract yi)
|
& hud . hudElement . subInventory . combineInvSel . _Just %~ ((`mod` numcombs) . subtract yi)
|
||||||
DisplayInventory (DisplayTerminal tp _) -> w
|
DisplayInventory (DisplayTerminal tp _)
|
||||||
& hud . hudElement . subInventory . termParams . termSel . _Just
|
| rbDown -> w
|
||||||
%~ ((`mod` length (_termOptions tp)) . subtract yi)
|
& hud . hudElement . subInventory . termParams %~ updatetermsubsel
|
||||||
|
| otherwise -> w
|
||||||
|
& hud . hudElement . subInventory . termParams %~ updatetermsel
|
||||||
_ -> w
|
_ -> w
|
||||||
where
|
where
|
||||||
|
updatetermsel tp = case _termSel tp of
|
||||||
|
Nothing -> tp & termSel ?~ (0,0)
|
||||||
|
& termInput . _Just %~ replacewith tp 0
|
||||||
|
Just (i,_) -> let newi = ((`mod` length (_termCommands tp)) . subtract yi) i
|
||||||
|
in tp & termSel . _Just .~ (newi,0)
|
||||||
|
& termInput . _Just %~ replacewith tp newi
|
||||||
|
updatetermsubsel tp = case _termSel tp of
|
||||||
|
Nothing -> tp
|
||||||
|
Just (i,j) -> let newj = (j - yi) `mod` (1 + length (_tcArguments (_termCommands tp !! i) w))
|
||||||
|
in tp & termSel . _Just .~ (i,newj)
|
||||||
|
& termInput . _Just %~ replacewith' tp i newj w
|
||||||
|
replacewith tp newi _ = T.pack (_tcString (_termCommands tp !! newi))
|
||||||
|
replacewith' tp i j w _ = T.pack $ _tcString tc ++ " " ++ arg-- ++ ((_tcArguments tp) w !! j)
|
||||||
|
where
|
||||||
|
arg :: String
|
||||||
|
arg = (("":(_tcArguments tc w) )!! j)
|
||||||
|
tc = _termCommands tp !! i
|
||||||
numcombs = length $ combineItemListYou w
|
numcombs = length $ combineItemListYou w
|
||||||
yi = round $ signum y
|
yi = round $ signum y
|
||||||
numLocs = (fst . IM.findMax $ _seenLocations w) + 1
|
numLocs = (fst . IM.findMax $ _seenLocations w) + 1
|
||||||
|
|||||||
+42
-38
@@ -3,19 +3,22 @@ module Dodge.Event.Keyboard
|
|||||||
( handleKeyboardEvent
|
( handleKeyboardEvent
|
||||||
, handleTextInput
|
, handleTextInput
|
||||||
) where
|
) where
|
||||||
import qualified Data.IntMap.Strict as IM
|
import Dodge.Terminal
|
||||||
import Dodge.Base
|
import Dodge.Base
|
||||||
import Dodge.Combine
|
import Dodge.Combine
|
||||||
import Dodge.Creature.Action
|
import Dodge.Creature.Action
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Event.Menu
|
import Dodge.Event.Menu
|
||||||
import Dodge.Event.Test
|
import Dodge.Event.Test
|
||||||
import Dodge.Inventory
|
import Dodge.Inventory
|
||||||
import Dodge.Menu
|
import Dodge.Menu
|
||||||
import Dodge.Reloading
|
import Dodge.Reloading
|
||||||
import Dodge.Save
|
import Dodge.Save
|
||||||
import LensHelp
|
import LensHelp
|
||||||
|
--import Color
|
||||||
|
|
||||||
|
--import Data.List
|
||||||
|
import qualified Data.IntMap.Strict as IM
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import qualified Data.Set as S
|
import qualified Data.Set as S
|
||||||
import SDL
|
import SDL
|
||||||
@@ -26,7 +29,7 @@ import qualified Data.Text as T
|
|||||||
-- dealt with elsewhere
|
-- dealt with elsewhere
|
||||||
handleTextInput :: T.Text -> Universe -> IO (Maybe Universe)
|
handleTextInput :: T.Text -> Universe -> IO (Maybe Universe)
|
||||||
handleTextInput text = return . Just . (menuLayers . ix 0 . scInput %~ updateText)
|
handleTextInput text = return . Just . (menuLayers . ix 0 . scInput %~ updateText)
|
||||||
. (uvWorld . hud . hudElement . subInventory . termParams . termInput . _Just . _1 %~ updateText)
|
. (uvWorld . hud . hudElement . subInventory . termParams . termInput . _Just %~ updateText)
|
||||||
where
|
where
|
||||||
updateText s = case T.unpack text of
|
updateText s = case T.unpack text of
|
||||||
";" -> s
|
";" -> s
|
||||||
@@ -46,29 +49,33 @@ handleKeyboardEvent kev u = case keyboardEventKeyMotion kev of
|
|||||||
scode = (keysymScancode . keyboardEventKeysym) kev
|
scode = (keysymScancode . keyboardEventKeysym) kev
|
||||||
|
|
||||||
handlePressedKey :: Bool -> Scancode -> Universe -> IO (Maybe Universe)
|
handlePressedKey :: Bool -> Scancode -> Universe -> IO (Maybe Universe)
|
||||||
handlePressedKey True _ w = return $ Just w
|
handlePressedKey True ScancodeBackspace u
|
||||||
handlePressedKey _ scode w = case scode of
|
| _backspaceTimer (_uvWorld u) <= 0 = handlePressedKey False ScancodeBackspace u
|
||||||
ScancodeF5 -> return . Just $ doQuicksave w
|
<&> _Just . uvWorld . backspaceTimer .~ 0
|
||||||
ScancodeF9 -> return . Just $ loadSaveSlot QuicksaveSlot w
|
| otherwise = return $ Just $ u & uvWorld . backspaceTimer -~ 1
|
||||||
ScancodeSemicolon -> return . Just $ gotoTerminal w
|
handlePressedKey True _ u = return $ Just u
|
||||||
_ | null (_menuLayers w) -> case w ^? uvWorld . hud . hudElement . subInventory . termParams . termInput . _Just of
|
handlePressedKey _ scode u = case scode of
|
||||||
Just {} -> return $ uvWorld (handlePressedKeyTerminal scode) w
|
ScancodeF5 -> return . Just $ doQuicksave u
|
||||||
_ -> return $ uvWorld (handlePressedKeyInGame scode) w
|
ScancodeF9 -> return . Just $ loadSaveSlot QuicksaveSlot u
|
||||||
_ -> handlePressedKeyInMenu (head $ _menuLayers w) scode w
|
ScancodeSemicolon -> return . Just $ gotoTerminal u
|
||||||
|
_ | null (_menuLayers u) -> case u ^? uvWorld . hud . hudElement . subInventory . termParams . termInput . _Just of
|
||||||
|
Just {} -> return $ uvWorld (handlePressedKeyTerminal scode) u
|
||||||
|
_ -> return $ uvWorld (Just . handlePressedKeyInGame scode) u
|
||||||
|
_ -> handlePressedKeyInMenu (head $ _menuLayers u) scode u
|
||||||
|
|
||||||
handlePressedKeyInGame :: Scancode -> World -> Maybe World
|
handlePressedKeyInGame :: Scancode -> World -> World
|
||||||
handlePressedKeyInGame scode w = case scode of
|
handlePressedKeyInGame scode w = case scode of
|
||||||
ScancodeEscape -> Just $ pauseGame $ escapeMap w
|
ScancodeEscape -> pauseGame $ escapeMap w
|
||||||
ScancodeSpace -> Just $ spaceAction w
|
ScancodeSpace -> spaceAction w
|
||||||
ScancodeP -> Just $ pauseGame $ escapeMap w
|
ScancodeP -> pauseGame $ escapeMap w
|
||||||
ScancodeF -> Just $ youDropItem w
|
ScancodeF -> youDropItem w
|
||||||
ScancodeM -> Just $ toggleMap w
|
ScancodeM -> toggleMap w
|
||||||
ScancodeR -> Just $ fromMaybe w $ startReloadingWeapon (you w) w
|
ScancodeR -> fromMaybe w $ startReloadingWeapon (you w) w
|
||||||
ScancodeT -> Just $ testEvent w
|
ScancodeT -> testEvent w
|
||||||
ScancodeX -> Just $ w & hud . hudElement %~ toggleTweakInv
|
ScancodeX -> w & hud . hudElement %~ toggleTweakInv
|
||||||
ScancodeC -> Just $ toggleCombineInv w
|
ScancodeC -> toggleCombineInv w
|
||||||
ScancodeI -> Just $ w & hud . hudElement %~ toggleInspectInv
|
ScancodeI -> w & hud . hudElement %~ toggleInspectInv
|
||||||
_ -> Just w
|
_ -> w
|
||||||
|
|
||||||
|
|
||||||
handlePressedKeyTerminal :: Scancode -> World -> Maybe World
|
handlePressedKeyTerminal :: Scancode -> World -> Maybe World
|
||||||
@@ -76,16 +83,13 @@ handlePressedKeyTerminal scode w = case scode of
|
|||||||
ScancodeEscape -> Just $ w & hud . hudElement . subInventory .~ NoSubInventory
|
ScancodeEscape -> Just $ w & hud . hudElement . subInventory .~ NoSubInventory
|
||||||
ScancodeReturn -> Just $ w & doTerminalEffect
|
ScancodeReturn -> Just $ w & doTerminalEffect
|
||||||
ScancodeBackspace -> Just $ w
|
ScancodeBackspace -> Just $ w
|
||||||
& hud . hudElement . subInventory . termParams . termInput . _Just . _1 %~ doBackspace
|
& hud . hudElement . subInventory . termParams . termInput . _Just %~ doBackspace
|
||||||
|
& backspaceTimer .~ 5
|
||||||
_ -> Just w
|
_ -> Just w
|
||||||
where
|
where
|
||||||
doBackspace t = case T.unsnoc t of
|
doBackspace t = case T.unsnoc t of
|
||||||
Nothing -> t
|
Nothing -> t
|
||||||
Just (t',_) -> t'
|
Just (t',_) -> t'
|
||||||
doTerminalEffect w' = fromMaybe w' $ do
|
|
||||||
f <- w' ^? hud . hudElement . subInventory . termParams . termInput . _Just . _2
|
|
||||||
s <- w' ^? hud . hudElement . subInventory . termParams . termInput . _Just . _1
|
|
||||||
return $ f (T.unpack s) w'
|
|
||||||
|
|
||||||
toggleTweakInv :: HUDElement -> HUDElement
|
toggleTweakInv :: HUDElement -> HUDElement
|
||||||
toggleTweakInv he = case he of
|
toggleTweakInv he = case he of
|
||||||
|
|||||||
@@ -165,13 +165,14 @@ updateTerminalLine w = case w ^? hud . hudElement . subInventory . termParams .
|
|||||||
Just (TerminalLineEffect _ eff) -> w
|
Just (TerminalLineEffect _ eff) -> w
|
||||||
& hud . hudElement . subInventory . termParams . termFutureLines %~ tail
|
& hud . hudElement . subInventory . termParams . termFutureLines %~ tail
|
||||||
& eff (_subInventory . _hudElement $ _hud w)
|
& eff (_subInventory . _hudElement $ _hud w)
|
||||||
Just (TerminalLineChoice _ ops) -> w
|
-- Just (TerminalLineChoice _ ops) -> w
|
||||||
|
-- & hud . hudElement . subInventory . termParams . termFutureLines %~ tail
|
||||||
|
-- & hud . hudElement . subInventory . termParams . termOptions .~ ops
|
||||||
|
-- & hud . hudElement . subInventory . termParams . termSel ?~ 0
|
||||||
|
Just (TerminalLineInput _ commands) -> w
|
||||||
& hud . hudElement . subInventory . termParams . termFutureLines %~ tail
|
& hud . hudElement . subInventory . termParams . termFutureLines %~ tail
|
||||||
& hud . hudElement . subInventory . termParams . termOptions .~ ops
|
& hud . hudElement . subInventory . termParams . termInput ?~ T.empty
|
||||||
& hud . hudElement . subInventory . termParams . termSel ?~ 0
|
& hud . hudElement . subInventory . termParams . termCommands .~ commands
|
||||||
Just (TerminalLineInput _ func) -> w
|
|
||||||
& hud . hudElement . subInventory . termParams . termFutureLines %~ tail
|
|
||||||
& hud . hudElement . subInventory . termParams . termInput ?~ (T.empty,func)
|
|
||||||
|
|
||||||
-- this looks ugly...
|
-- this looks ugly...
|
||||||
updateCloseObjects :: World -> World
|
updateCloseObjects :: World -> World
|
||||||
|
|||||||
@@ -72,8 +72,9 @@ analyser' starts sucs fails afters upf pslight psmc = extTrigLitPos pslight $ \t
|
|||||||
, _termMaxLines = 7
|
, _termMaxLines = 7
|
||||||
, _termTitle = "ANALYSER"
|
, _termTitle = "ANALYSER"
|
||||||
, _termSel = Nothing
|
, _termSel = Nothing
|
||||||
, _termOptions = []
|
-- , _termOptions = []
|
||||||
, _termInput = Nothing
|
, _termInput = Nothing
|
||||||
|
, _termCommands = []
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
(\mc -> upf mc . (triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc))
|
(\mc -> upf mc . (triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc))
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ termButton = Button
|
|||||||
, _btID = 0
|
, _btID = 0
|
||||||
, _btText = "TERMINAL"
|
, _btText = "TERMINAL"
|
||||||
, _btState = BtOff
|
, _btState = BtOff
|
||||||
, _btTerminalParams = const $ TerminalParams [] [] 10 "TERMINAL" Nothing [] Nothing
|
, _btTerminalParams = const $ TerminalParams [] [] 10 "TERMINAL" Nothing Nothing []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -115,8 +115,9 @@ genTermMessage f = \gp _ -> TerminalParams
|
|||||||
,_termMaxLines = 7
|
,_termMaxLines = 7
|
||||||
,_termTitle = "TERMINAL"
|
,_termTitle = "TERMINAL"
|
||||||
,_termSel = Nothing
|
,_termSel = Nothing
|
||||||
,_termOptions = []
|
-- ,_termOptions = []
|
||||||
,_termInput = Nothing
|
,_termInput = Nothing
|
||||||
|
,_termCommands = []
|
||||||
}
|
}
|
||||||
where
|
where
|
||||||
totermline s = TerminalLineDisplay 0 (const (s,white))
|
totermline s = TerminalLineDisplay 0 (const (s,white))
|
||||||
|
|||||||
@@ -88,13 +88,13 @@ subInventoryDisplay subinv cfig w = case subinv of
|
|||||||
[ invHead cfig (_termTitle tp ++ ":T" ++ show tid)
|
[ invHead cfig (_termTitle tp ++ ":T" ++ show tid)
|
||||||
, renderListAt subInvX 60 cfig
|
, renderListAt subInvX 60 cfig
|
||||||
. displayTermInput tp
|
. displayTermInput tp
|
||||||
. (++ (map (\(str,_) -> (str,white)) (_termOptions tp)))
|
-- . (++ map (\(str,_) -> (str,white)) (_termOptions tp))
|
||||||
. reverse
|
. reverse
|
||||||
. take (_termMaxLines tp)
|
. take (_termMaxLines tp)
|
||||||
$ _termDisplayedLines tp <&> ($ w)
|
$ _termDisplayedLines tp <&> ($ w)
|
||||||
, fromMaybe mempty $ do
|
-- , fromMaybe mempty $ do
|
||||||
cursori <- _termSel tp <&> (+ _termMaxLines tp)
|
-- cursori <- _termSel tp <&> (+ _termMaxLines tp)
|
||||||
return $ listCursorNSW subInvX 60 cfig cursori white 15 1
|
-- return $ listCursorNSW subInvX 60 cfig cursori white 15 1
|
||||||
]
|
]
|
||||||
CombineInventory mi -> pictures
|
CombineInventory mi -> pictures
|
||||||
[ invHead cfig "COMBINE"
|
[ invHead cfig "COMBINE"
|
||||||
@@ -124,7 +124,7 @@ subInventoryDisplay subinv cfig w = case subinv of
|
|||||||
where
|
where
|
||||||
displayTermInput tp = case _termInput tp of
|
displayTermInput tp = case _termInput tp of
|
||||||
Nothing -> id
|
Nothing -> id
|
||||||
Just (s,_) -> (++ [('>':T.unpack s++clockCycle 10 (V.fromList ["_",""]) w,white)])
|
Just s -> (++ [('>':T.unpack s++clockCycle 10 (V.fromList ["_",""]) w,white)])
|
||||||
closeobjectcursor = case selectedCloseObject w of
|
closeobjectcursor = case selectedCloseObject w of
|
||||||
Nothing -> mempty
|
Nothing -> mempty
|
||||||
Just (i,co) -> listCursorNS clObjFloatIn 0 cfig (selNumPos i w) (closeObjectCol co) topInvW (invSelSize i w)
|
Just (i,co) -> listCursorNS clObjFloatIn 0 cfig (selNumPos i w) (closeObjectCol co) topInvW (invSelSize i w)
|
||||||
|
|||||||
+10
-10
@@ -1,5 +1,6 @@
|
|||||||
{-# LANGUAGE TupleSections #-}
|
--{-# LANGUAGE TupleSections #-}
|
||||||
module Dodge.Room.Warning where
|
module Dodge.Room.Warning where
|
||||||
|
import Dodge.Terminal
|
||||||
import Dodge.LevelGen.Data
|
import Dodge.LevelGen.Data
|
||||||
import Dodge.PlacementSpot
|
import Dodge.PlacementSpot
|
||||||
import Dodge.Placement.Instance.Terminal
|
import Dodge.Placement.Instance.Terminal
|
||||||
@@ -34,6 +35,7 @@ import Data.Maybe
|
|||||||
--import Data.Tree
|
--import Data.Tree
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import System.Random
|
import System.Random
|
||||||
|
--import qualified Data.Text as T
|
||||||
|
|
||||||
|
|
||||||
warningRooms :: RandomGen g => Int -> State g (LabSubCompTree Room)
|
warningRooms :: RandomGen g => Int -> State g (LabSubCompTree Room)
|
||||||
@@ -51,7 +53,7 @@ addWarningTerminal outplid = (rmName .++~ "warningTerm-")
|
|||||||
where
|
where
|
||||||
outplace = extTrigLitPos
|
outplace = extTrigLitPos
|
||||||
(atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a)))
|
(atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a)))
|
||||||
(\trid -> Just $ set plSpot (rprShift fps) $ putTerminal $ termMessages trid)
|
(Just . set plSpot (rprShift fps) . putTerminal . termMessages)
|
||||||
--termspot = atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a))
|
--termspot = atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a))
|
||||||
fps rp rm = case rp ^? rpLinkStatus . rplsChildNum of
|
fps rp rm = case rp ^? rpLinkStatus . rplsChildNum of
|
||||||
Just 0 ->
|
Just 0 ->
|
||||||
@@ -66,15 +68,13 @@ addWarningTerminal outplid = (rmName .++~ "warningTerm-")
|
|||||||
then Just (rtpos, rpdir)
|
then Just (rtpos, rpdir)
|
||||||
else Just (ltpos, rpdir)
|
else Just (ltpos, rpdir)
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
termMessages trid = ops trid (genTermMessage $ const ["AVAILABLE COMMANDS:"
|
termMessages trid = ops trid (genTermMessage $ const ["OPEN DOOR?"])
|
||||||
, " QUIT TOGGLE"
|
|
||||||
, replicate 50 'M'
|
|
||||||
])
|
|
||||||
-- <&> termFutureLines %~ (++ [TerminalLineChoice 0 (ops trid)])
|
-- <&> termFutureLines %~ (++ [TerminalLineChoice 0 (ops trid)])
|
||||||
ops _ f gw w = f gw w & termFutureLines %~
|
ops trid f gw w = f gw w & termFutureLines %~
|
||||||
(++ [ TerminalLineInput 0 (const id) ])
|
(++ [ TerminalLineInput 0 [quitCommand,helpCommand,infoCommand theinfo,commandsCommand,unlockCommand trid]])
|
||||||
|
unlockCommand trid = singleCommand "OPEN" ["YES","Y"] "OPEN THE CONNECTED DOOR." (toggledoor trid)
|
||||||
-- (++ [ TerminalLineChoice 0 [ ("TOGGLE", toggledoor trid)
|
-- (++ [ TerminalLineChoice 0 [ ("TOGGLE", toggledoor trid)
|
||||||
-- , ("EXIT", id)
|
-- , ("EXIT", id)
|
||||||
-- ]])
|
-- ]])
|
||||||
--toggledoor trid w' = w' & triggers . ix (fromJust $ _plMID trid) .~ const True
|
toggledoor trid w' = w' & triggers . ix (fromJust $ _plMID trid) .~ const True
|
||||||
|
theinfo = "DOOR CONTROLABLE BY ENTERING \"OPEN\". THIS TERMINAL CANNOT CLOSE THE DOOR."
|
||||||
|
|||||||
@@ -131,8 +131,11 @@ rotateCamera cfig w
|
|||||||
| keyr = rotateCameraBy (-0.025) w
|
| keyr = rotateCameraBy (-0.025) w
|
||||||
| otherwise = ifConfigWallRotate cfig w
|
| otherwise = ifConfigWallRotate cfig w
|
||||||
where
|
where
|
||||||
keyl = SDL.ScancodeQ `S.member` _keys w
|
keyl = SDL.ScancodeQ `S.member` _keys w && notAtTerminal w
|
||||||
keyr = SDL.ScancodeE `S.member` _keys w
|
keyr = SDL.ScancodeE `S.member` _keys w && notAtTerminal w
|
||||||
|
|
||||||
|
notAtTerminal :: World -> Bool
|
||||||
|
notAtTerminal w = isNothing $ w ^? hud . hudElement . subInventory . termParams . termInput . _Just
|
||||||
|
|
||||||
--zoomCamBy :: Float -> World -> World
|
--zoomCamBy :: Float -> World -> World
|
||||||
--zoomCamBy x w = w {_cameraZoom = max (_cameraZoom w + x) 0.01}
|
--zoomCamBy x w = w {_cameraZoom = max (_cameraZoom w + x) 0.01}
|
||||||
|
|||||||
Reference in New Issue
Block a user