From d11d19c9e81247658eb057ecbb9385fe322cfaf6 Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 13 Sep 2021 00:34:14 +0100 Subject: [PATCH] Fix reloading of start of level --- src/Dodge/Event/Keyboard.hs | 30 ++---------------------------- src/Dodge/Initialisation.hs | 3 ++- src/Dodge/Menu.hs | 9 ++------- src/Dodge/Save.hs | 21 +++++++++++++++++++++ 4 files changed, 27 insertions(+), 36 deletions(-) create mode 100644 src/Dodge/Save.hs diff --git a/src/Dodge/Event/Keyboard.hs b/src/Dodge/Event/Keyboard.hs index 7544fa21f..722212acf 100644 --- a/src/Dodge/Event/Keyboard.hs +++ b/src/Dodge/Event/Keyboard.hs @@ -6,26 +6,20 @@ module Dodge.Event.Keyboard ) where import Dodge.Data ---import Dodge.Data.Menu -import Dodge.Picture.Layer +import Dodge.Save import Dodge.Base import Dodge.Creature.Action import Dodge.Config.KeyConfig ---import Dodge.Room.Placement -import Dodge.LightSources -import Dodge.LevelGen -import Dodge.Creature.Inanimate -import qualified Data.IntMap.Strict as IM import Dodge.Event.Test import Dodge.Event.Menu import Dodge.Menu +import qualified Data.IntMap.Strict as IM import SDL import Data.Maybe import qualified Data.Set as S import Control.Lens -import Picture {- | Handles keyboard press and release. On release, remove scancode from the 'Set' of pressed keys. On press, adds the scancode, and perhaps applies a direct effect: @@ -47,12 +41,6 @@ handlePressedKey _ scode w | null (_menuLayers w) = handlePressedKeyInGame scode w | otherwise = handlePressedKeyInMenu (head $ _menuLayers w) scode w -doQuicksave :: World -> World -doQuicksave w = w & quicksaveLevel ?~ clearKeys w - -clearKeys :: World -> World -clearKeys = (keys .~ S.empty) . (mouseButtons .~ S.empty) - handlePressedKeyInGame :: Scancode -> World -> Maybe World handlePressedKeyInGame scode w | scode == escapeKey (_keyConfig w) = Nothing @@ -64,8 +52,6 @@ handlePressedKeyInGame scode w | scode == spaceActionKey (_keyConfig w) = Just $ spaceAction w | scode == rotateCameraPlusKey (_keyConfig w) = Just $ w & cameraRot +~ 0.01 | scode == rotateCameraMinusKey (_keyConfig w) = Just $ w & cameraRot -~ 0.01 - | scode == ScancodeF5 = Just $ dropLight w - | scode == ScancodeF6 = Just $ dropLight' w | scode == ScancodeX = Just $ w & inventoryMode %~ toggleInv TweakInventory | scode == ScancodeC = Just $ w & inventoryMode %~ toggleInv CombineInventory | scode == ScancodeI = Just $ w & inventoryMode %~ toggleInv InspectInventory @@ -100,15 +86,3 @@ toggleMap w = w & carteDisplay %~ not escapeMap :: World -> World escapeMap w = w & carteDisplay .~ False -dropLight :: World -> World -dropLight w = placeLS ls dec pos 0 w - where --(rot, g) = randomR (-pi,pi) $ _randGen w - (V2 x y) = _crPos (you w) - pos = V3 x y 0 - ls = lightAt pos 0 - dec = onLayer PtLayer $ color white $ circleSolid 8 - -dropLight' :: World -> World -dropLight' w = placeCr (lamp 30) pos 0 w - where - pos = _crPos(you w) diff --git a/src/Dodge/Initialisation.hs b/src/Dodge/Initialisation.hs index 52e88b5df..7a45c0c5b 100644 --- a/src/Dodge/Initialisation.hs +++ b/src/Dodge/Initialisation.hs @@ -1,5 +1,6 @@ module Dodge.Initialisation where import Dodge.Default.World +import Dodge.Save import Dodge.Data import Dodge.Data.SoundOrigin import Dodge.Creature @@ -47,7 +48,7 @@ initialWorld = defaultWorld , _mousePos = V2 0 0 , _testString = testStringInit , _yourID = 0 - , _worldEvents = soundStart BackgroundSound (V2 0 0) foamSprayFadeOutS Nothing + , _worldEvents = storeLevel . soundStart BackgroundSound (V2 0 0) foamSprayFadeOutS Nothing . foldr ((.) . makeStartCloudAt) id [V3 x y 5 | x <- [-5,-3..5] , y <- [-5,-3..5]] , _pressPlates = IM.empty , _buttons = IM.empty diff --git a/src/Dodge/Menu.hs b/src/Dodge/Menu.hs index 12899e3d7..2665b766e 100644 --- a/src/Dodge/Menu.hs +++ b/src/Dodge/Menu.hs @@ -1,6 +1,7 @@ module Dodge.Menu where import Dodge.Data +import Dodge.Save import Dodge.Config.Data import Dodge.Config.Update import SDL @@ -14,7 +15,6 @@ import Dodge.SoundLogic import Picture import Control.Lens -import Data.Maybe optionMenu :: ScreenLayer optionMenu = OptionScreen { _scTitle = const "OPTIONS" @@ -131,7 +131,7 @@ pauseMenu = OptionScreen pauseMenuOptions :: [MenuOption] pauseMenuOptions = [ Toggle ScancodeN startNewGame (const "NEW LEVEL") - , Toggle ScancodeR (\w -> return $ fromMaybe w $ _storedLevel w) (const "RESTART") + , Toggle ScancodeR (Just . loadStoredLevel) (const "RESTART") , Toggle ScancodeO (pushScreen optionMenu ) (const "OPTIONS") , Toggle ScancodeC (pushScreen displayControls) (const "CONTROLS") , InvisibleToggle ScancodeEscape (const Nothing) @@ -174,11 +174,6 @@ levelMenu x = OptionScreen unpause :: World -> Maybe World unpause w = Just . resumeSound $ w {_menuLayers = []} -storeLevel :: World -> World -storeLevel w = case _storedLevel w of - Nothing -> w & storedLevel ?~ w - _ -> w - displayControls :: ScreenLayer displayControls = DisplayScreen {_scDisplay = \w -> pictures diff --git a/src/Dodge/Save.hs b/src/Dodge/Save.hs new file mode 100644 index 000000000..94aedfe43 --- /dev/null +++ b/src/Dodge/Save.hs @@ -0,0 +1,21 @@ +module Dodge.Save + where +import Dodge.Data + +import Data.Maybe +import Control.Lens +import qualified Data.Set as S + +storeLevel :: World -> World +storeLevel w = case _storedLevel w of + Nothing -> w & storedLevel ?~ clearKeys w + _ -> w + +loadStoredLevel :: World -> World +loadStoredLevel w = fromMaybe w $ _storedLevel w + +doQuicksave :: World -> World +doQuicksave w = w & quicksaveLevel ?~ clearKeys w + +clearKeys :: World -> World +clearKeys = (keys .~ S.empty) . (mouseButtons .~ S.empty)