Unify save states
This commit is contained in:
+17
-8
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user