This commit is contained in:
2025-06-03 10:23:24 +01:00
parent f4cce1cb38
commit 560694c644
2 changed files with 209 additions and 204 deletions
+40 -35
View File
@@ -4,12 +4,11 @@ module Dodge.Menu (
splashMenu,
) where
import Dodge.Base.Coordinate
import Geometry
import Control.Monad
import qualified Data.Aeson.Encode.Pretty as AEP
import Data.ByteString.Lazy.Char8 (unpack)
import Data.Maybe
import Dodge.Base.Coordinate
import Dodge.Concurrent
import Dodge.Config.Update
import Dodge.Data.Universe
@@ -19,13 +18,14 @@ import Dodge.Menu.PushPop
import Dodge.Save
import Dodge.SoundLogic
import Dodge.StartNewGame
import Geometry
import LensHelp
import MaybeHelp
import Padding
import Preload.Update
import qualified SDL as SDL
import System.Clipboard
import Text.Read
import qualified SDL as SDL
splashMenu :: Universe -> ScreenLayer
splashMenu u =
@@ -35,17 +35,17 @@ splashMenu u =
splashMenuOptions :: [MenuOption]
splashMenuOptions =
[ Toggle (loadSaveSlot (SaveSlotNum 0)) displaycontinue
, Toggle (startNewGameInSlot 0) (opText "NEW WITH RANDOM SEED")
, Toggle (startNewGameInSlot 0) (otext "NEW WITH RANDOM SEED")
, Toggle reloadLevelStart (displaywhenseed "NEW WITH LAST SEED")
, Toggle (pushScreen $ seedStartMenu "START FROM SEED") (opText "NEW WITH SPECIFIC SEED")
, Toggle (pushScreen optionMenu) (opText "OPTIONS")
, Toggle (pushScreen displayControls) (opText "VIEW CONTROLS")
, Toggle (pushScreen displayConfig) (opText "VIEW CONFIG")
, Toggle (pushScreen $ seedStartMenu "START FROM SEED") (otext "NEW WITH SPECIFIC SEED")
, Toggle (pushScreen optionMenu) (otext "OPTIONS")
, Toggle (pushScreen displayControls) (otext "VIEW CONTROLS")
, Toggle (pushScreen displayConfig) (otext "VIEW CONFIG")
, Toggle id (displaywhenseed "VIEW LAST SEED")
, Toggle hardQuit (opText "QUIT")
, Toggle hardQuit (otext "QUIT")
]
where
opText = const . MODString
otext = const . MODString
displaycontinue u
| _uvCanContinue u = MODString "CONTINUE"
| otherwise = MODBlockedString "CONTINUE"
@@ -60,16 +60,16 @@ pauseMenu =
pauseMenuOptions :: [MenuOption]
pauseMenuOptions =
[ Toggle (startNewGameInSlot 0) (opText "NEW GAME")
, Toggle reloadLevelStart (opText "RESTART")
, Toggle (pushScreen $ seedStartMenu "START FROM SEED") (opText "NEW FROM SEED")
, Toggle (pushScreen optionMenu) (opText "OPTIONS")
, Toggle (pushScreen displayControls) (opText "VIEW CONTROLS")
, Toggle id (opText "VIEW CURRENT SEED")
, Toggle saveQuit (opText "SAVE AND QUIT")
[ Toggle (startNewGameInSlot 0) (otext "NEW GAME")
, Toggle reloadLevelStart (otext "RESTART")
, Toggle (pushScreen $ seedStartMenu "START FROM SEED") (otext "NEW FROM SEED")
, Toggle (pushScreen optionMenu) (otext "OPTIONS")
, Toggle (pushScreen displayControls) (otext "VIEW CONTROLS")
, Toggle id (otext "VIEW CURRENT SEED")
, Toggle saveQuit (otext "SAVE AND QUIT")
]
where
opText = const . MODString
otext = const . MODString
saveQuit :: Universe -> Universe
saveQuit u = u & addSideEffect (saveQuitConc u) "SAVING"
@@ -193,17 +193,21 @@ gameOverMenu u =
--charToScode = Scancode . fromIntegral . (\x -> x - 61) . fromEnum
unpause :: Universe -> Universe
unpause u' = resumeSound . set uvScreenLayers []
. set (uvWorld . input . mousePos) (u' ^. uvWorld . cWorld . lWorld . lAimPos)
$ over uvIOEffects (\f u -> SDL.warpMouse SDL.WarpCurrentFocus (SDL.P (SDL.V2 x' y')) >> f u)
u'
unpause u' =
resumeSound . set uvScreenLayers []
. set (uvWorld . input . mousePos) (u' ^. uvWorld . cWorld . lWorld . lAimPos)
$ over
uvIOEffects
(\f u -> SDL.warpMouse SDL.WarpCurrentFocus (SDL.P (SDL.V2 x' y')) >> f u)
u'
where
cfig = u' ^. uvConfig
x' = round $ x + 0.5 * windowXFloat cfig
y' = round $ 0.5 * windowYFloat cfig - y
V2 x y = worldPosToScreen (u' ^. uvWorld . wCam)
(u' ^. uvWorld . cWorld . lWorld . lAimPos)
V2 x y =
worldPosToScreen
(u' ^. uvWorld . wCam)
(u' ^. uvWorld . cWorld . lWorld . lAimPos)
-- note that this won't update after it is first loaded
displayConfig :: Universe -> ScreenLayer
@@ -217,27 +221,28 @@ listConfig =
. _uvConfig
displayControls :: Universe -> ScreenLayer
--displayControls = const $ ColumnsScreen "CONTROLS" listControls
displayControls =
titleOptionsNoWrite "CONTROLS" $
map (Toggle id . const . uncurry MODStringOption) listControls
listControls :: [(String, String)]
listControls =
[ ("w|a|s|d", "MOVEMENT")
[ ("w|a|s|d", "MOVE")
, ("<rmb>", "AIM")
, ("<rmb>&<lmb>", "SHOOT/USE/EQUIP SELECTED")
-- , ("<lmb>", "USE EQUIPPED")
, ("<rmb>&<lmb>", "USE SELECTED")
, ("<lmb>&<rmb>", "ROTATE")
, ("<wheelscroll>", "SELECT ITEM")
, ("<space>", "PICKUP ITEM")
, ("f", "DROP ITEM")
, ("q|e|0-9", "USE EQUIPMENT")
, ("<ctrl>+<wheelscroll>", "SWAP ITEMS")
, ("<shift>&q|e|0-9", "SET HOTKEY")
, ("q|e|0-9", "USE HOTKEY")
, ("c", "COMBINE ITEMS")
, ("x", "EXAMINE ITEMS")
, ("m", "DISPLAY MAP")
, ("c|<esc>", "PAUSE AND DISPLAY MENU")
, ("<F1>", "USE NORMAL CAMERA")
, ("<F2>", "PAUSE AND FLOAT CAMERA")
-- , ("x", "EXAMINE ITEMS")
-- , ("m", "DISPLAY MAP")
, ("p|<esc>", "PAUSE")
, ("<F1>", "NORMAL CAMERA")
, ("<F2>", "DEBUG CAMERA")
, ("<F5>", "QUICKSAVE")
, ("<F9>", "QUICKLOAD")
]