Work on menus
This commit is contained in:
+23
-23
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user