Cleanup creature picture

This commit is contained in:
2021-09-04 14:53:05 +01:00
parent 1ab3f1773c
commit 215a3dda36
13 changed files with 318 additions and 307 deletions
+20 -49
View File
@@ -2,63 +2,39 @@ module Dodge.Event.Menu
( handlePressedKeyInMenu
) where
import Dodge.Data
import Dodge.Data.Menu
--import Dodge.Base.Window
--import Dodge.Floor
--import Dodge.Initialisation
import Dodge.SoundLogic
--import Dodge.Config.Data
import Dodge.Config.Update
--import Dodge.Layout
--import Preload.Update
import Dodge.Debug.Terminal
import Dodge.Menu
--import Data.Maybe
--import Data.Foldable
--import qualified Data.Set as S
import Control.Monad
import Control.Lens
import SDL
--import SDL.Internal.Numbered
handlePressedKeyInMenu :: MenuLayer -> Scancode -> World -> Maybe World
handlePressedKeyInMenu mState scode w = case mState of
TerminalMessage 0 _ -> popMenu w
TerminalMessage _ m -> Just $ w & menuLayers %~ ((TerminalMessage 0 m : ) . tail)
Terminal s -> case scode of
ScancodeEscape -> popMenu w
ScancodeReturn -> popMenu $ applyTerminalString s w
ScancodeBackspace -> popMenu w >>= pushMenu (Terminal $ dropLast s)
_ -> popMenu w >>= pushMenu (Terminal $ s ++ [scodeToChar scode])
LevelMenu _ -> optionListToEffects levelMenuOptions startLevel scode w
PauseMenu -> optionListToEffects pauseMenuOptions unpause scode w
GameOverMenu -> optionListToEffects pauseMenuOptions pure scode w
OptionMenu -> optionListToEffects optionsOptions popMenu scode w
SoundOptionMenu -> optionListToEffects
soundMenuOptions
( popMenu . writeConfig )
scode
w
GraphicsOptionMenu -> optionListToEffects graphicsMenuOptions (popMenu . writeConfig) scode w
ControlList -> Just $ w & menuLayers %~ tail
_ -> Just w
handlePressedKeyInMenu :: ScreenLayer -> Scancode -> World -> Maybe World
handlePressedKeyInMenu mState scode = case mState of
OptionScreen { _scOptions = mos, _scDefaultEff = defeff}
-> optionListToEffects mos defeff scode
DisplayScreen {} -> popScreen
WaitScreen {} -> Just
TerminalScreen 0 _ -> popScreen
TerminalScreen _ m -> Just . ( menuLayers %~ ( (TerminalScreen 0 m : ) . tail) )
InputScreen s -> case scode of
ScancodeEscape -> popScreen
ScancodeReturn -> popScreen . applyTerminalString s
ScancodeBackspace
-> popScreen >=> pushScreen (InputScreen $ dropLast s)
_ -> popScreen >=> pushScreen (InputScreen $ s ++ [scodeToChar scode])
where
writeConfig = sideEffects %~ (saveConfig (_config w) :)
unpause w' = Just . resumeSound $ w' {_menuLayers = []}
startLevel = unpause . storeLevel
popMenu w' = Just $ w' & menuLayers %~ tail
dropLast (x:xs) = init (x:xs)
dropLast _ = []
dropLast _ = []
optionListToEffects :: [MenuOption] -> (World -> Maybe World) -> Scancode -> World -> Maybe World
optionListToEffects mos eff sc w = case lookup sc listEffects of
Nothing -> eff w
Just eff' -> eff' w
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 Toggle {_moKey = k, _moEff = eff} = [(k,eff)]
menuOptionToEffects Toggle {_moKey = k, _moEff = eff} = [(k,eff)]
menuOptionToEffects InvisibleToggle {_moKey = k, _moEff = eff} = [(k,eff)]
menuOptionToEffects Toggle2
{ _moKey1 = k1
@@ -66,8 +42,3 @@ menuOptionToEffects Toggle2
, _moKey2 = k2
, _moEff2 = eff2
} = [(k1,eff1) , (k2,eff2)]
storeLevel :: World -> World
storeLevel w = case _storedLevel w of
Nothing -> w & storedLevel ?~ w
_ -> w