Cleanup menu options

This commit is contained in:
2022-05-25 23:06:47 +01:00
parent ba80bfd0ad
commit 34612822ae
3 changed files with 39 additions and 41 deletions
+2 -2
View File
@@ -237,9 +237,9 @@ data ScreenLayer
} }
data MenuOption data MenuOption
= Toggle = Toggle
{ _moKey :: Scancode { _moEff :: Universe -> IO (Maybe Universe)
, _moEff :: Universe -> IO (Maybe Universe)
, _moString :: Universe -> Either String (String,String) , _moString :: Universe -> Either String (String,String)
, _moKey :: Scancode
} }
| Toggle2 | Toggle2
{ _moKey1 :: Scancode { _moKey1 :: Scancode
+34 -34
View File
@@ -33,13 +33,15 @@ slTitleOptionsEff title ops eff = OptionScreen
pauseMenu :: ScreenLayer pauseMenu :: ScreenLayer
pauseMenu = slTitleOptionsEff "PAUSED" pauseMenuOptions (return . unpause) pauseMenu = slTitleOptionsEff "PAUSED" pauseMenuOptions (return . unpause)
pauseMenuOptions :: [MenuOption] pauseMenuOptions :: [MenuOption]
pauseMenuOptions = pauseMenuOptions = basicKeyOptions
[ Toggle ScancodeN (return . Just . startNewGame) (opText "NEW LEVEL") [ Toggle (return . Just . startNewGame) (opText "NEW LEVEL")
, Toggle ScancodeR (return . Just . loadSaveSlot LevelStartSlot) (opText "RESTART") , Toggle (return . Just . loadSaveSlot LevelStartSlot) (opText "RESTART")
, Toggle ScancodeS (pushScreen $ seedStartMenu "START FROM SEED") (opText "START FROM SEED") , Toggle (pushScreen $ seedStartMenu "START FROM SEED") (opText "START FROM SEED")
, Toggle ScancodeO (pushScreen optionMenu ) (opText "OPTIONS") , Toggle (pushScreen optionMenu ) (opText "OPTIONS")
, Toggle ScancodeC (pushScreen displayControls) (opText "CONTROLS") , Toggle (pushScreen displayControls) (opText "CONTROLS")
, InvisibleToggle ScancodeEscape (return . const Nothing) ]
++
[ InvisibleToggle ScancodeEscape (return . const Nothing)
] ]
where where
opText = const . Left opText = const . Left
@@ -47,7 +49,7 @@ seedStartMenu :: String -> ScreenLayer
seedStartMenu str = slTitleOptionsEff str seedStartOptions popScreen seedStartMenu str = slTitleOptionsEff str seedStartOptions popScreen
seedStartOptions :: [MenuOption] seedStartOptions :: [MenuOption]
seedStartOptions = seedStartOptions =
[ Toggle ScancodeP trySeedFromClipboard (const $ Left "PASTE NUMBER FROM CLIPBOARD") [ Toggle trySeedFromClipboard (const $ Left "PASTE NUMBER FROM CLIPBOARD") ScancodeA
-- , Toggle ScancodeI (return . Just . loadSaveSlot LevelStartSlot) (const "INSERT NUMBER") -- , Toggle ScancodeI (return . Just . loadSaveSlot LevelStartSlot) (const "INSERT NUMBER")
] ]
@@ -66,11 +68,11 @@ optionMenu :: ScreenLayer
optionMenu = slTitleOptionsEff "OPTIONS" optionsOptions popScreen optionMenu = slTitleOptionsEff "OPTIONS" optionsOptions popScreen
optionsOptions :: [MenuOption] optionsOptions :: [MenuOption]
optionsOptions = optionsOptions = basicKeyOptions
[ makeSubmenuOption ScancodeV soundMenu $ Left "VOLUME" [ makeSubmenuOption soundMenu $ Left "VOLUME"
, makeSubmenuOption ScancodeG graphicsMenu $ Left "GRAPHICS" , makeSubmenuOption graphicsMenu $ Left "GRAPHICS"
, makeSubmenuOption ScancodeP gameplayMenu $ Left "GAMEPLAY" , makeSubmenuOption gameplayMenu $ Left "GAMEPLAY"
, makeSubmenuOption ScancodeD debugMenu $ Left "DEBUG OPTIONS" , makeSubmenuOption debugMenu $ Left "DEBUG OPTIONS"
] ]
debugMenu :: ScreenLayer debugMenu :: ScreenLayer
debugMenu = slTitleOptions debugMenu = slTitleOptions
@@ -78,31 +80,29 @@ debugMenu = slTitleOptions
debugMenuOptions debugMenuOptions
debugMenuOptions :: [MenuOption] debugMenuOptions :: [MenuOption]
debugMenuOptions = zipWith ($) debugMenuOptions = zipWith ($)
[ doption debug_seconds_frame "SHOW SECONDS/FRAME" _debug_seconds_frame [ makeBoolOption debug_seconds_frame "SHOW SECONDS/FRAME"
, doption debug_noclip "NOCLIP" _debug_noclip , makeBoolOption debug_noclip "NOCLIP"
, doption debug_cr_status "SHOW CREATURE STATUS" _debug_cr_status , makeBoolOption debug_cr_status "SHOW CREATURE STATUS"
, doption debug_cr_awareness "SHOW CREATURE AWARENESS" _debug_cr_awareness , makeBoolOption debug_cr_awareness "SHOW CREATURE AWARENESS"
, doption debug_view_boundaries "SHOW VIEW BOUNDARIES" _debug_view_boundaries , makeBoolOption debug_view_boundaries "SHOW VIEW BOUNDARIES"
, \sc -> makeEnumOption sc debug_view_clip_bounds "SHOW ROOM CLIP" return , makeEnumOption debug_view_clip_bounds "SHOW ROOM CLIP" return
, doption debug_pathing "SHOW PATHING" _debug_pathing , makeBoolOption debug_pathing "SHOW PATHING"
, doption debug_show_sound "SHOW VISUAL SOUNDS" _debug_show_sound , makeBoolOption debug_show_sound "SHOW VISUAL SOUNDS"
, doption debug_mouse_position "SHOW MOUSE POSITION" _debug_mouse_position , makeBoolOption debug_mouse_position "SHOW MOUSE POSITION"
--, doption debug_walls "SHOW WALL INFO" _debug_walls , makeBoolOption debug_walls "SHOW WALL INFO"
, \sc -> makeBoolOption sc debug_walls "SHOW WALL INFO"
] ]
$ map Scancode [4 ..] $ map Scancode [4 ..]
where
doption l t rec scode
= Toggle scode (return . Just . (config . l %~ not)) (\w -> Right (t ,show (rec $ _config w)))
gameplayMenu :: ScreenLayer gameplayMenu :: ScreenLayer
gameplayMenu = slTitleOptions gameplayMenu = slTitleOptions
"OPTIONS:GAMEPLAY" "OPTIONS:GAMEPLAY"
gameplayMenuOptions gameplayMenuOptions
gameplayMenuOptions :: [MenuOption] gameplayMenuOptions :: [MenuOption]
gameplayMenuOptions = gameplayMenuOptions = basicKeyOptions
[ makeBoolOption ScancodeR gameplay_rotate_to_wall "ROTATE TO WALL" [ makeBoolOption gameplay_rotate_to_wall "ROTATE TO WALL"
] ]
basicKeyOptions :: [Scancode -> c] -> [c]
basicKeyOptions xs = zipWith ($) xs $ map Scancode [4 .. ]
soundMenu :: ScreenLayer soundMenu :: ScreenLayer
soundMenu = slTitleOptions soundMenu = slTitleOptions
@@ -134,11 +134,11 @@ graphicsMenu :: ScreenLayer
graphicsMenu = slTitleOptions "OPTIONS:GRAPHICS" graphicsMenuOptions graphicsMenu = slTitleOptions "OPTIONS:GRAPHICS" graphicsMenuOptions
graphicsMenuOptions :: [MenuOption] graphicsMenuOptions :: [MenuOption]
graphicsMenuOptions = graphicsMenuOptions = basicKeyOptions
[ makeEnumOption ScancodeS graphics_resolution_factor "RESOLUTION" updateFramebufferSize [ makeEnumOption graphics_resolution_factor "RESOLUTION" updateFramebufferSize
, makeBoolOption ScancodeW graphics_wall_textured "WALL TEXTURES" , makeBoolOption graphics_wall_textured "WALL TEXTURES"
, makeBoolOption ScancodeO graphics_object_shadows "OBJECT SHADOWS" , makeBoolOption graphics_object_shadows "OBJECT SHADOWS"
, makeBoolOption ScancodeC graphics_cloud_shadows "CLOUD SHADOWS" , makeBoolOption graphics_cloud_shadows "CLOUD SHADOWS"
] ]
gameOverMenu :: ScreenLayer gameOverMenu :: ScreenLayer
+3 -5
View File
@@ -4,17 +4,15 @@ import Dodge.Data
import Dodge.Menu.PushPop import Dodge.Menu.PushPop
import Control.Lens import Control.Lens
makeBoolOption scode lns t = Toggle makeBoolOption lns t = Toggle
scode
(return . Just . (config . lns #%~ not)) (return . Just . (config . lns #%~ not))
(\u -> Right (t , show (u ^# config . lns))) (\u -> Right (t , show (u ^# config . lns)))
makeEnumOption scode lns str sideeff = Toggle makeEnumOption lns str sideeff = Toggle
scode
(\u -> Just <$> sideeff (u & config . lns #%~ cycleEnum) ) (\u -> Just <$> sideeff (u & config . lns #%~ cycleEnum) )
(\u -> Right (str , show (u ^# config . lns)) ) (\u -> Right (str , show (u ^# config . lns)) )
makeSubmenuOption scode submenu t = Toggle scode (pushScreen submenu) (const t) makeSubmenuOption submenu t = Toggle (pushScreen submenu) (const t)
cycleEnum :: (Eq a, Enum a,Bounded a) => a -> a cycleEnum :: (Eq a, Enum a,Bounded a) => a -> a
cycleEnum x cycleEnum x