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
				
			
		|  | @ -2,9 +2,11 @@ | |||
| -------------------------------------------------------------------------------- | ||||
| module Xanthous.Data.EntityMapSpec where | ||||
| -------------------------------------------------------------------------------- | ||||
| import Test.Prelude | ||||
| import           Test.Prelude | ||||
| -------------------------------------------------------------------------------- | ||||
| import Xanthous.Data.EntityMap | ||||
| import qualified Data.Aeson as JSON | ||||
| -------------------------------------------------------------------------------- | ||||
| import           Xanthous.Data.EntityMap | ||||
| -------------------------------------------------------------------------------- | ||||
| 
 | ||||
| main :: IO () | ||||
|  | @ -30,4 +32,9 @@ test = localOption (QuickCheckTests 20) | |||
|         then (em₁ == em₃) | ||||
|         else True | ||||
|     ] | ||||
|   , testGroup "JSON encoding/decoding" | ||||
|     [ testProperty "Preserves IDs" $ \(em :: EntityMap Int) -> | ||||
|         let Just em' = JSON.decode $ JSON.encode em | ||||
|         in toEIDsAndPositioned em' === toEIDsAndPositioned em | ||||
|     ] | ||||
|   ] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue