Attempt to make CWorld correct instance of Store

This commit is contained in:
2022-08-20 15:53:37 +01:00
parent e1a555ea02
commit 8571ab9254
89 changed files with 570 additions and 19 deletions
+32 -2
View File
@@ -6,19 +6,48 @@ module Dodge.Save (
writeSaveSlot,
readSaveSlot,
reloadLevelStart,
toJSONSaveSlot,
fromJSONSaveSlot,
) where
import qualified Data.Store as Store
import Dodge.Concurrent
import Control.Lens
import Dodge.Data.SaveSlot
import Data.Aeson
import qualified Data.Aeson.Encode.Pretty as AEP
import qualified Data.ByteString.Lazy as BS
import qualified Data.ByteString as BSS
import Dodge.Data.Universe
--import qualified Data.Set as S
import System.Directory
writeSaveSlot :: SaveSlot -> Universe -> IO (Universe -> Maybe Universe)
writeSaveSlot ss u = do
putStrLn $ "Saving " ++ saveSlotPath ss
createDirectoryIfMissing True "saveSlot"
BSS.writeFile (saveSlotPath ss) $
Store.encode
(u ^. uvWorld . cWorld)
return Just
readSaveSlot :: SaveSlot -> IO (Universe -> Maybe Universe)
readSaveSlot ss = do
fExists <- doesFileExist $ saveSlotPath ss
if fExists
then do
bsstr <- BSS.readFile $ saveSlotPath ss
cwstr <- Store.decodeIO $ bsstr
case cwstr of
Nothing -> putStrLn "loadSaveSlot failed to read saved file" >> return removescreenlayers
Just cw -> return $ \uv -> Just $ uv & uvWorld . cWorld .~ cw
& uvScreenLayers .~ []
else putStrLn "loadSaveSlot failed to find saved file" >> return removescreenlayers
where
removescreenlayers = Just . (uvScreenLayers .~ [])
toJSONSaveSlot :: SaveSlot -> Universe -> IO (Universe -> Maybe Universe)
toJSONSaveSlot ss u = do
putStrLn $ "Saving " ++ saveSlotPath ss
createDirectoryIfMissing True "saveSlot"
BS.writeFile (saveSlotPath ss) $
@@ -27,8 +56,9 @@ writeSaveSlot ss u = do
(u ^. uvWorld . cWorld)
return Just
readSaveSlot :: SaveSlot -> IO (Universe -> Maybe Universe)
readSaveSlot ss = do
fromJSONSaveSlot :: SaveSlot -> IO (Universe -> Maybe Universe)
fromJSONSaveSlot ss = do
fExists <- doesFileExist $ saveSlotPath ss
if fExists
then do