Work on terminals: allow scrolling to get default inputs
This commit is contained in:
+42
-38
@@ -3,19 +3,22 @@ module Dodge.Event.Keyboard
|
||||
( handleKeyboardEvent
|
||||
, handleTextInput
|
||||
) where
|
||||
import qualified Data.IntMap.Strict as IM
|
||||
import Dodge.Base
|
||||
import Dodge.Combine
|
||||
import Dodge.Creature.Action
|
||||
import Dodge.Data
|
||||
import Dodge.Event.Menu
|
||||
import Dodge.Event.Test
|
||||
import Dodge.Inventory
|
||||
import Dodge.Menu
|
||||
import Dodge.Reloading
|
||||
import Dodge.Save
|
||||
import Dodge.Terminal
|
||||
import Dodge.Base
|
||||
import Dodge.Combine
|
||||
import Dodge.Creature.Action
|
||||
import Dodge.Data
|
||||
import Dodge.Event.Menu
|
||||
import Dodge.Event.Test
|
||||
import Dodge.Inventory
|
||||
import Dodge.Menu
|
||||
import Dodge.Reloading
|
||||
import Dodge.Save
|
||||
import LensHelp
|
||||
--import Color
|
||||
|
||||
--import Data.List
|
||||
import qualified Data.IntMap.Strict as IM
|
||||
import Data.Maybe
|
||||
import qualified Data.Set as S
|
||||
import SDL
|
||||
@@ -26,7 +29,7 @@ import qualified Data.Text as T
|
||||
-- dealt with elsewhere
|
||||
handleTextInput :: T.Text -> Universe -> IO (Maybe Universe)
|
||||
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
|
||||
updateText s = case T.unpack text of
|
||||
";" -> s
|
||||
@@ -46,29 +49,33 @@ handleKeyboardEvent kev u = case keyboardEventKeyMotion kev of
|
||||
scode = (keysymScancode . keyboardEventKeysym) kev
|
||||
|
||||
handlePressedKey :: Bool -> Scancode -> Universe -> IO (Maybe Universe)
|
||||
handlePressedKey True _ w = return $ Just w
|
||||
handlePressedKey _ scode w = case scode of
|
||||
ScancodeF5 -> return . Just $ doQuicksave w
|
||||
ScancodeF9 -> return . Just $ loadSaveSlot QuicksaveSlot w
|
||||
ScancodeSemicolon -> return . Just $ gotoTerminal w
|
||||
_ | null (_menuLayers w) -> case w ^? uvWorld . hud . hudElement . subInventory . termParams . termInput . _Just of
|
||||
Just {} -> return $ uvWorld (handlePressedKeyTerminal scode) w
|
||||
_ -> return $ uvWorld (handlePressedKeyInGame scode) w
|
||||
_ -> handlePressedKeyInMenu (head $ _menuLayers w) scode w
|
||||
handlePressedKey True ScancodeBackspace u
|
||||
| _backspaceTimer (_uvWorld u) <= 0 = handlePressedKey False ScancodeBackspace u
|
||||
<&> _Just . uvWorld . backspaceTimer .~ 0
|
||||
| otherwise = return $ Just $ u & uvWorld . backspaceTimer -~ 1
|
||||
handlePressedKey True _ u = return $ Just u
|
||||
handlePressedKey _ scode u = case scode of
|
||||
ScancodeF5 -> return . Just $ doQuicksave u
|
||||
ScancodeF9 -> return . Just $ loadSaveSlot QuicksaveSlot u
|
||||
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
|
||||
ScancodeEscape -> Just $ pauseGame $ escapeMap w
|
||||
ScancodeSpace -> Just $ spaceAction w
|
||||
ScancodeP -> Just $ pauseGame $ escapeMap w
|
||||
ScancodeF -> Just $ youDropItem w
|
||||
ScancodeM -> Just $ toggleMap w
|
||||
ScancodeR -> Just $ fromMaybe w $ startReloadingWeapon (you w) w
|
||||
ScancodeT -> Just $ testEvent w
|
||||
ScancodeX -> Just $ w & hud . hudElement %~ toggleTweakInv
|
||||
ScancodeC -> Just $ toggleCombineInv w
|
||||
ScancodeI -> Just $ w & hud . hudElement %~ toggleInspectInv
|
||||
_ -> Just w
|
||||
ScancodeEscape -> pauseGame $ escapeMap w
|
||||
ScancodeSpace -> spaceAction w
|
||||
ScancodeP -> pauseGame $ escapeMap w
|
||||
ScancodeF -> youDropItem w
|
||||
ScancodeM -> toggleMap w
|
||||
ScancodeR -> fromMaybe w $ startReloadingWeapon (you w) w
|
||||
ScancodeT -> testEvent w
|
||||
ScancodeX -> w & hud . hudElement %~ toggleTweakInv
|
||||
ScancodeC -> toggleCombineInv w
|
||||
ScancodeI -> w & hud . hudElement %~ toggleInspectInv
|
||||
_ -> w
|
||||
|
||||
|
||||
handlePressedKeyTerminal :: Scancode -> World -> Maybe World
|
||||
@@ -76,16 +83,13 @@ handlePressedKeyTerminal scode w = case scode of
|
||||
ScancodeEscape -> Just $ w & hud . hudElement . subInventory .~ NoSubInventory
|
||||
ScancodeReturn -> Just $ w & doTerminalEffect
|
||||
ScancodeBackspace -> Just $ w
|
||||
& hud . hudElement . subInventory . termParams . termInput . _Just . _1 %~ doBackspace
|
||||
& hud . hudElement . subInventory . termParams . termInput . _Just %~ doBackspace
|
||||
& backspaceTimer .~ 5
|
||||
_ -> Just w
|
||||
where
|
||||
doBackspace t = case T.unsnoc t of
|
||||
Nothing -> 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 he = case he of
|
||||
|
||||
Reference in New Issue
Block a user