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
+22
View File
@@ -0,0 +1,22 @@
{-# OPTIONS -fno-warn-missing-signatures #-}
module Dodge.Menu.OptionType where
import Dodge.Data
import Dodge.Menu.PushPop
import Control.Lens
makeBoolOption scode lns t = Toggle
scode
(return . Just . (config . lns #%~ not))
(\u -> t ++ ":" ++ show (u ^# config . lns))
makeEnumOption scode lns str sideeff = Toggle
scode
(\u -> Just <$> sideeff (u & config . lns #%~ cycleEnum) )
(\u -> str ++ ":" ++ show (u ^# config . lns))
makeSubmenuOption scode submenu t = Toggle scode (pushScreen submenu) (const t)
cycleEnum :: (Eq a, Enum a,Bounded a) => a -> a
cycleEnum x
| x == maxBound = minBound
| otherwise = succ x
+14
View File
@@ -0,0 +1,14 @@
module Dodge.Menu.PushPop where
import Dodge.Data
import LensHelp
popScreen' :: Universe -> Maybe Universe
popScreen' = Just . (menuLayers %~ tail)
popScreen :: Universe -> IO (Maybe Universe)
popScreen = return . popScreen'
pushScreen' :: ScreenLayer -> Universe -> Maybe Universe
pushScreen' ml = Just . (menuLayers .:~ ml)
pushScreen :: ScreenLayer -> Universe -> IO (Maybe Universe)
pushScreen ml = return . pushScreen' ml