Rethink item ammo to item consumables, start item type datatype
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user