Remove a lot of IO/maybe cruft
This commit is contained in:
@@ -47,9 +47,9 @@ On release, remove scancode from the 'Set' of pressed keys.
|
||||
On press, adds the scancode, and perhaps applies a direct effect:
|
||||
see 'handlePressedKeyInGame'.
|
||||
-}
|
||||
handleKeyboardEvent :: KeyboardEventData -> Universe -> IO (Maybe Universe)
|
||||
handleKeyboardEvent :: KeyboardEventData -> Universe -> Universe
|
||||
handleKeyboardEvent kev u = case keyboardEventKeyMotion kev of
|
||||
Released -> return . Just $ u & uvWorld . input . pressedKeys . at scode .~ Nothing
|
||||
Released -> u & uvWorld . input . pressedKeys . at scode .~ Nothing
|
||||
Pressed ->
|
||||
handlePressedKey
|
||||
(keyboardEventRepeat kev)
|
||||
@@ -61,17 +61,17 @@ handleKeyboardEvent kev u = case keyboardEventKeyMotion kev of
|
||||
| otherwise = InitialPress
|
||||
scode = (keysymScancode . keyboardEventKeysym) kev
|
||||
|
||||
handlePressedKey :: Bool -> Scancode -> Universe -> IO (Maybe Universe)
|
||||
handlePressedKey True _ u = return $ Just u
|
||||
handlePressedKey :: Bool -> Scancode -> Universe -> Universe
|
||||
handlePressedKey True _ u = u
|
||||
handlePressedKey _ scode u = case scode of
|
||||
ScancodeF5 -> return . Just $ doQuicksave u
|
||||
ScancodeF9 -> return . Just $ loadSaveSlot QuicksaveSlot u
|
||||
ScancodeSemicolon -> return . Just $ gotoTerminal u
|
||||
ScancodeF5 -> doQuicksave u
|
||||
ScancodeF9 -> loadSaveSlot QuicksaveSlot u
|
||||
ScancodeSemicolon -> gotoTerminal u
|
||||
_ | null (_uvScreenLayers u) -> case u ^? uvWorld . cWorld . lWorld . hud . hudElement . subInventory of
|
||||
Just (DisplayTerminal tmid)
|
||||
| inTermFocus (_uvWorld u) ->
|
||||
return $ uvWorld (Just . handlePressedKeyTerminal tmid scode) u
|
||||
_ -> return $ Just u
|
||||
over uvWorld (handlePressedKeyTerminal tmid scode) u
|
||||
_ -> u
|
||||
_ -> handlePressedKeyInMenu (head $ _uvScreenLayers u) scode u
|
||||
|
||||
handlePressedKeyTerminal :: Int -> Scancode -> World -> World
|
||||
|
||||
@@ -8,24 +8,23 @@ import Dodge.Data.Universe
|
||||
import Dodge.WindowLayout
|
||||
import SDL
|
||||
|
||||
handlePressedKeyInMenu :: ScreenLayer -> Scancode -> Universe -> IO (Maybe Universe)
|
||||
handlePressedKeyInMenu :: ScreenLayer -> Scancode -> Universe -> Universe
|
||||
handlePressedKeyInMenu mState scode = case mState of
|
||||
OptionScreen{_scOptions = mos, _scDefaultEff = defeff} ->
|
||||
optionListToEffects defeff scode mos
|
||||
--DisplayScreen{} -> popScreen
|
||||
-- WaitScreen{} -> return . Just
|
||||
_ -> return . Just
|
||||
_ -> id
|
||||
|
||||
optionListToEffects ::
|
||||
(Universe -> IO (Maybe Universe)) ->
|
||||
(Universe -> Universe) ->
|
||||
Scancode ->
|
||||
[MenuOption] ->
|
||||
Universe ->
|
||||
IO (Maybe Universe)
|
||||
Universe
|
||||
optionListToEffects defaulteff sc mops u = case sc of
|
||||
ScancodeSpace ->
|
||||
return . Just
|
||||
. (uvScreenLayers . ix 0 . scOptionsOffset %~ (f . (+ mlines)))
|
||||
(uvScreenLayers . ix 0 . scOptionsOffset %~ (f . (+ mlines)))
|
||||
$ u
|
||||
_ ->
|
||||
( fromMaybe defaulteff
|
||||
@@ -40,7 +39,7 @@ optionListToEffects defaulteff sc mops u = case sc of
|
||||
| otherwise = x
|
||||
mlines = availableMenuLines $ _uvConfig u
|
||||
|
||||
menuOptionToEffects :: MenuOption -> [(Scancode, Universe -> IO (Maybe Universe))]
|
||||
menuOptionToEffects :: MenuOption -> [(Scancode, Universe -> Universe)]
|
||||
menuOptionToEffects Toggle{_moKey = k, _moEff = eff} = [(k, eff)]
|
||||
menuOptionToEffects InvisibleToggle{_moKey = k, _moEff = eff} = [(k, eff)]
|
||||
menuOptionToEffects
|
||||
|
||||
Reference in New Issue
Block a user