Add generic derivations and To/FromJSON instances

This commit is contained in:
2022-07-25 22:49:18 +01:00
parent f5604ef429
commit b8e8413daa
99 changed files with 1406 additions and 517 deletions
+25
View File
@@ -3,13 +3,38 @@ module Dodge.Save
, loadSaveSlot
, doQuicksave
, saveLevelStartSlot
, writeSaveSlot
, readSaveSlot
) where
import Dodge.Data
import Text.Read (readMaybe)
import qualified Data.Map.Strict as M
--import Data.Maybe
import Control.Lens
--import qualified Data.Set as S
import System.Directory
writeSaveSlot :: SaveSlot -> Universe -> IO ()
writeSaveSlot ss u = do
createDirectoryIfMissing True "saveSlot"
writeFile (saveSlotPath ss) (show $ u ^. uvWorld . cWorld)
saveSlotPath :: SaveSlot -> String
saveSlotPath (SaveSlotNum i) = "saveSlot/" ++ show i
saveSlotPath QuicksaveSlot = "saveSlot/QuickSave"
saveSlotPath LevelStartSlot = "saveSlot/LevelStartSave"
readSaveSlot :: SaveSlot -> Universe -> IO Universe
readSaveSlot ss uv = do
fExists <- doesFileExist $ saveSlotPath ss
if fExists
then do
cwstr <- readFile $ saveSlotPath ss
case readMaybe cwstr of
Nothing -> putStrLn "loadSaveSlot failed to read saved file" >> return uv
Just cw -> return $ uv & uvWorld . cWorld .~ cw
else putStrLn "loadSaveSlot failed to find saved file" >> return uv
saveWorldInEmptySlot :: SaveSlot -> Universe -> Universe
saveWorldInEmptySlot slot w = case M.lookup slot $ _savedWorlds w of