Move menu layers outside of world

This commit is contained in:
2021-11-28 14:26:15 +00:00
parent 574f195b21
commit 462100703c
13 changed files with 132 additions and 124 deletions
+12 -11
View File
@@ -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