Unify save states

This commit is contained in:
2021-10-19 14:20:56 +01:00
parent 4c3a18d7d7
commit 1f8b4b8565
6 changed files with 25 additions and 18 deletions
+17 -8
View File
@@ -1,25 +1,34 @@
module Dodge.Save
( storeLevel
, loadStoredLevel
( saveWorldInEmptySlot
, loadSaveSlot
, doQuicksave
)
where
import Dodge.Data
import qualified Data.Map.Strict as M
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
clearSaves :: World -> World
clearSaves = savedWorlds .~ M.empty
saveWorldInEmptySlot :: SaveSlot -> World -> World
saveWorldInEmptySlot slot w = case M.lookup slot $ _savedWorlds w of
Nothing -> w & savedWorlds %~ M.insert slot (clearKeys w)
_ -> w
loadStoredLevel :: World -> World
loadStoredLevel w = fromMaybe w $ _storedLevel w <&> quicksaveLevel .~ _quicksaveLevel w
saveWorldInSlot :: SaveSlot -> World -> World
saveWorldInSlot slot w = w & savedWorlds %~ M.insert slot (clearSaves $ clearKeys w)
loadSaveSlot :: SaveSlot -> World -> World
loadSaveSlot slot w = fromMaybe w
$ M.lookup slot (_savedWorlds w)
<&> savedWorlds .~ _savedWorlds w -- keep saves from current point, not from save point
doQuicksave :: World -> World
doQuicksave w = w & quicksaveLevel ?~ clearKeys w
doQuicksave = saveWorldInSlot QuicksaveSlot
clearKeys :: World -> World
clearKeys = (keys .~ S.empty) . (mouseButtons .~ S.empty)