Work on menus

This commit is contained in:
2022-11-22 10:14:25 +00:00
parent 054405244f
commit 860d63df45
13 changed files with 251 additions and 167 deletions
+23 -23
View File
@@ -4,6 +4,7 @@ module Dodge.Menu (
splashMenu,
) where
import Dodge.Data.SelectionList
import ShortShow
import Control.Monad
import Dodge.Concurrent
@@ -24,15 +25,15 @@ import System.Clipboard
import Text.Read
import Data.Maybe
splashMenu :: ScreenLayer
splashMenu =
slTitleOptionsEff "AMNESIS" splashMenuOptions id
splashMenu :: Universe -> ScreenLayer
splashMenu u =
slTitleOptionsEff "AMNESIS" splashMenuOptions Nothing id u
& scOptionFlag .~ SplashOptions
splashMenuOptions :: [MenuOption]
splashMenuOptions =
[ Toggle ( loadSaveSlot (SaveSlotNum 0)) displaycontinue
, Toggle id (\u -> MODString $ show $ u ^? uvScreenLayers . _head . scSelPos . _Just)
, Toggle id (\u -> MODString $ show $ u ^? uvScreenLayers . _head . scSelectionList . slSelPos . _Just)
, Toggle id (\u -> MODString $ shortShow $ u ^. uvWorld . input . mousePos)
, Toggle ( startNewGameInSlot 0) (opText "NEW WITH RANDOM SEED")
, Toggle reloadLevelStart (displaywhenseed "NEW WITH LAST SEED")
@@ -49,8 +50,8 @@ splashMenuOptions =
displaywhenseed str u | isNothing (_uvMSeed u) = MODBlockedString str
| otherwise = MODString str
pauseMenu :: ScreenLayer
pauseMenu = slTitleOptionsEff "PAUSED" pauseMenuOptions unpause
pauseMenu :: Universe -> ScreenLayer
pauseMenu = slTitleOptionsEff "PAUSED" pauseMenuOptions (Just "CONTINUE") unpause
pauseMenuOptions :: [MenuOption]
pauseMenuOptions =
@@ -75,8 +76,8 @@ saveQuitConc u = do
void $ writeSaveSlot (SaveSlotNum 0) u
return $ const Nothing
seedStartMenu :: String -> ScreenLayer
seedStartMenu str = slTitleOptionsEff str seedStartOptions popScreen
seedStartMenu :: String -> Universe -> ScreenLayer
seedStartMenu str = slTitleOptionsEff str seedStartOptions (Just "BACK") popScreen
seedStartOptions :: [MenuOption]
seedStartOptions =
@@ -94,11 +95,11 @@ trySeedFromClipboard u = do
(u & uvScreenLayers %~ tail)
Just i -> return $ startSeedGame 0 i u
slTitleOptions :: String -> [MenuOption] -> ScreenLayer
slTitleOptions title ops = slTitleOptionsEff title ops (popScreen . writeConfig)
slTitleOptions :: String -> [MenuOption] -> Universe -> ScreenLayer
slTitleOptions title ops = slTitleOptionsEff title ops (Just "BACK") (popScreen . writeConfig)
optionMenu :: ScreenLayer
optionMenu = slTitleOptionsEff "OPTIONS" optionsOptions popScreen
optionMenu :: Universe -> ScreenLayer
optionMenu = slTitleOptionsEff "OPTIONS" optionsOptions (Just "BACK") popScreen
optionsOptions :: [MenuOption]
optionsOptions =
@@ -106,10 +107,9 @@ optionsOptions =
, makeSubmenuOption graphicsMenu $ MODString "GRAPHICS"
, makeSubmenuOption gameplayMenu $ MODString "GAMEPLAY"
, makeSubmenuOption debugMenu $ MODString "DEBUG OPTIONS"
, Toggle popScreen $ const $ MODString "BACK"
]
debugMenu :: ScreenLayer
debugMenu :: Universe -> ScreenLayer
debugMenu =
slTitleOptions
"OPTIONS:GAMEPLAY"
@@ -117,7 +117,7 @@ debugMenu =
debugMenuOptions :: [MenuOption]
debugMenuOptions =
(map f [minBound ..] ++ [makeEnumOption debug_view_clip_bounds "SHOW ROOM CLIP" id])
map f [minBound ..] ++ [makeEnumOption debug_view_clip_bounds "SHOW ROOM CLIP" id]
where
f :: DebugBool -> MenuOption
f bd =
@@ -141,7 +141,7 @@ debugMenuOptions =
-- , makeBoolOption debug_cull_more_lights "CULL MORE LIGHTS"
-- ]
-- $ map Scancode [4 ..]
gameplayMenu :: ScreenLayer
gameplayMenu :: Universe -> ScreenLayer
gameplayMenu =
slTitleOptions
"OPTIONS:GAMEPLAY"
@@ -152,7 +152,7 @@ gameplayMenuOptions =
[ makeBoolOption gameplay_rotate_to_wall "ROTATE TO WALL"
]
soundMenu :: ScreenLayer
soundMenu :: Universe -> ScreenLayer
soundMenu =
slTitleOptions
"OPTIONS:VOLUME"
@@ -179,7 +179,7 @@ soundMenuOptions =
writeConfig :: Universe -> Universe
writeConfig w = w & uvIOEffects %~ saveConfig (_uvConfig w)
graphicsMenu :: ScreenLayer
graphicsMenu :: Universe -> ScreenLayer
graphicsMenu = slTitleOptions "OPTIONS:GRAPHICS" graphicsMenuOptions
graphicsMenuOptions :: [MenuOption]
@@ -190,9 +190,9 @@ graphicsMenuOptions =
, makeBoolOption graphics_cloud_shadows "CLOUD SHADOWS"
]
gameOverMenu :: ScreenLayer
gameOverMenu =
slTitleOptionsEff "GAME OVER" pauseMenuOptions id
gameOverMenu :: Universe -> ScreenLayer
gameOverMenu u =
slTitleOptionsEff "GAME OVER" pauseMenuOptions Nothing id u
& scOptionFlag .~ GameOverOptions
-- OptionScreen
@@ -209,8 +209,8 @@ gameOverMenu =
unpause :: Universe -> Universe
unpause w = resumeSound $ w & uvScreenLayers .~ []
displayControls :: ScreenLayer
displayControls = ColumnsScreen (const "CONTROLS") listControls
displayControls :: Universe -> ScreenLayer
displayControls = const $ ColumnsScreen "CONTROLS" listControls
listControls :: [(String, String)]
listControls =