Move menu layers outside of world
This commit is contained in:
+12
-11
@@ -13,29 +13,30 @@ import SDL
|
||||
handlePressedKeyInMenu :: ScreenLayer -> Scancode -> Universe -> Maybe Universe
|
||||
handlePressedKeyInMenu mState scode = case mState of
|
||||
OptionScreen { _scOptions = mos, _scDefaultEff = defeff}
|
||||
-> uvWorld $ optionListToEffects mos defeff scode
|
||||
DisplayScreen {} -> uvWorld $ popScreen
|
||||
ColumnsScreen {} -> uvWorld $ popScreen
|
||||
-> optionListToEffects mos defeff scode
|
||||
DisplayScreen {} -> popScreen
|
||||
ColumnsScreen {} -> popScreen
|
||||
WaitScreen {} -> Just
|
||||
TerminalScreen 0 _ -> uvWorld $ popScreen
|
||||
TerminalScreen _ m -> Just . (uvWorld . menuLayers %~ ( (TerminalScreen 0 m : ) . tail) )
|
||||
TerminalScreen 0 _ -> popScreen
|
||||
TerminalScreen _ m -> Just . (menuLayers %~ ( (TerminalScreen 0 m : ) . tail) )
|
||||
InputScreen s -> case scode of
|
||||
ScancodeEscape -> uvWorld $ popScreen
|
||||
ScancodeReturn -> uvWorld $ popScreen . applyTerminalString s
|
||||
ScancodeEscape -> popScreen
|
||||
ScancodeReturn -> popScreen . (over uvWorld $ applyTerminalString s)
|
||||
ScancodeBackspace
|
||||
-> uvWorld $ popScreen >=> pushScreen (InputScreen $ dropLast s)
|
||||
_ -> uvWorld $ popScreen >=> pushScreen (InputScreen $ s ++ [scodeToChar scode])
|
||||
-> popScreen >=> pushScreen (InputScreen $ dropLast s)
|
||||
_ -> popScreen >=> pushScreen (InputScreen $ s ++ [scodeToChar scode])
|
||||
where
|
||||
dropLast (x:xs) = init (x:xs)
|
||||
dropLast _ = []
|
||||
optionListToEffects :: [MenuOption] -> (World -> Maybe World) -> Scancode -> World -> Maybe World
|
||||
optionListToEffects :: [MenuOption] -> (Universe -> Maybe Universe) -> Scancode
|
||||
-> Universe -> Maybe Universe
|
||||
optionListToEffects mos defaulteff sc w = case lookup sc listEffects of
|
||||
Nothing -> defaulteff w
|
||||
Just eff -> eff w
|
||||
where
|
||||
listEffects = concatMap menuOptionToEffects mos
|
||||
|
||||
menuOptionToEffects :: MenuOption -> [(Scancode,World -> Maybe World)]
|
||||
menuOptionToEffects :: MenuOption -> [(Scancode,Universe -> Maybe Universe)]
|
||||
menuOptionToEffects Toggle {_moKey = k, _moEff = eff} = [(k,eff)]
|
||||
menuOptionToEffects InvisibleToggle {_moKey = k, _moEff = eff} = [(k,eff)]
|
||||
menuOptionToEffects Toggle2
|
||||
|
||||
Reference in New Issue
Block a user