Implement saving+loading the game
Implement ToJSON and FromJSON for all of the various pieces of the game state, and add a pair of functions saveGame/loadGame implementing a prism to save the game as zlib-compressed JSON. To test this, there's now Arbitrary, CoArbitrary, and Function instances for all the parts of the game state - to get around circular imports with the concrete entities this unfortunately is happening via orphan instances, plus an hs-boot file to break a circular import that was just a little too hard to remove by moving things around. Ugh.
This commit is contained in:
parent
2f2e5a0b68
commit
f37d0f75c0
30 changed files with 620 additions and 97 deletions
|
|
@ -1,4 +1,6 @@
|
|||
{-# LANGUAGE UndecidableInstances #-}
|
||||
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||
{-# LANGUAGE StandaloneDeriving #-}
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
--------------------------------------------------------------------------------
|
||||
module Xanthous.Game.Arbitrary where
|
||||
|
|
@ -9,7 +11,7 @@ import Test.QuickCheck
|
|||
import System.Random
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Game.State
|
||||
import Xanthous.Entities.Arbitrary ()
|
||||
import Xanthous.Entities.Entities ()
|
||||
import Xanthous.Entities.Character
|
||||
import qualified Xanthous.Data.EntityMap as EntityMap
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
@ -26,3 +28,8 @@ instance Arbitrary GameState where
|
|||
let _promptState = NoPrompt -- TODO
|
||||
_debugState <- arbitrary
|
||||
pure $ GameState {..}
|
||||
|
||||
|
||||
instance CoArbitrary GameState
|
||||
instance Function GameState
|
||||
deriving newtype instance CoArbitrary (m (a, GameState)) => CoArbitrary (AppT m a)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue