Rethink item ammo to item consumables, start item type datatype
This commit is contained in:
+11
-12
@@ -5,7 +5,9 @@ module Dodge.Event.Menu
|
||||
import Dodge.Data
|
||||
import Dodge.Debug.Terminal
|
||||
import Dodge.Menu
|
||||
import Dodge.Menu.PushPop
|
||||
|
||||
import Data.Maybe
|
||||
import Control.Monad
|
||||
--import Control.Lens
|
||||
import SDL
|
||||
@@ -14,28 +16,25 @@ handlePressedKeyInMenu :: ScreenLayer -> Scancode -> Universe -> IO (Maybe Unive
|
||||
handlePressedKeyInMenu mState scode = case mState of
|
||||
OptionScreen { _scOptions = mos, _scDefaultEff = defeff}
|
||||
-> optionListToEffects mos defeff scode
|
||||
DisplayScreen {} -> return . popScreen
|
||||
ColumnsScreen {} -> return . popScreen
|
||||
DisplayScreen {} -> popScreen
|
||||
ColumnsScreen {} -> popScreen
|
||||
WaitScreen {} -> return . Just
|
||||
InputScreen s -> case scode of
|
||||
ScancodeEscape -> return . popScreen
|
||||
ScancodeReturn -> return . popScreen . applyTerminalString s
|
||||
ScancodeEscape -> popScreen
|
||||
ScancodeReturn -> popScreen . applyTerminalString s
|
||||
ScancodeBackspace
|
||||
-> return . (popScreen >=> pushScreen (InputScreen $ dropLast s))
|
||||
_ -> return . (popScreen >=> pushScreen (InputScreen $ s ++ [scodeToChar scode]))
|
||||
-> return . (popScreen' >=> pushScreen' (InputScreen $ dropLast s))
|
||||
_ -> return . (popScreen' >=> pushScreen' (InputScreen $ s ++ [scodeToChar scode]))
|
||||
where
|
||||
dropLast (x:xs) = init (x:xs)
|
||||
dropLast _ = []
|
||||
|
||||
optionListToEffects :: [MenuOption] -> (Universe -> IO (Maybe Universe)) -> Scancode
|
||||
-> Universe -> IO (Maybe Universe)
|
||||
optionListToEffects mos defaulteff sc w = case lookup sc listEffects of
|
||||
Nothing -> defaulteff w
|
||||
Just eff -> return $ eff w
|
||||
where
|
||||
listEffects = concatMap menuOptionToEffects mos
|
||||
optionListToEffects mos defaulteff sc = fromMaybe defaulteff .
|
||||
lookup sc $ concatMap menuOptionToEffects mos
|
||||
|
||||
menuOptionToEffects :: MenuOption -> [(Scancode,Universe -> Maybe Universe)]
|
||||
menuOptionToEffects :: MenuOption -> [(Scancode,Universe -> IO (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