Rethink item ammo to item consumables, start item type datatype

This commit is contained in:
2021-11-29 16:22:31 +00:00
parent 3a605b8156
commit f40d486d68
31 changed files with 238 additions and 193 deletions
+11 -12
View File
@@ -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