Files
loop/src/Dodge/Save.hs
T
2021-10-19 14:20:56 +01:00

35 lines
995 B
Haskell

module Dodge.Save
( 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
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
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 = saveWorldInSlot QuicksaveSlot
clearKeys :: World -> World
clearKeys = (keys .~ S.empty) . (mouseButtons .~ S.empty)