Add 'users/glittershark/xanthous/' from commit '53b56744f4'
git-subtree-dir: users/glittershark/xanthous git-subtree-mainline:91f53f02d8git-subtree-split:53b56744f4
This commit is contained in:
commit
2edb963b97
96 changed files with 10030 additions and 0 deletions
72
users/glittershark/xanthous/src/Xanthous/Game.hs
Normal file
72
users/glittershark/xanthous/src/Xanthous/Game.hs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
module Xanthous.Game
|
||||
( GameState(..)
|
||||
, levels
|
||||
, entities
|
||||
, revealedPositions
|
||||
, messageHistory
|
||||
, randomGen
|
||||
, promptState
|
||||
, GamePromptState(..)
|
||||
|
||||
, getInitialState
|
||||
, initialStateFromSeed
|
||||
|
||||
, positionedCharacter
|
||||
, character
|
||||
, characterPosition
|
||||
, updateCharacterVision
|
||||
, characterVisiblePositions
|
||||
, entitiesAtCharacter
|
||||
|
||||
-- * Messages
|
||||
, MessageHistory(..)
|
||||
, HasMessages(..)
|
||||
, HasTurn(..)
|
||||
, HasDisplayedTurn(..)
|
||||
, pushMessage
|
||||
, previousMessage
|
||||
, nextTurn
|
||||
|
||||
-- * Collisions
|
||||
, Collision(..)
|
||||
, collisionAt
|
||||
|
||||
-- * App monad
|
||||
, AppT(..)
|
||||
|
||||
-- * Saving the game
|
||||
, saveGame
|
||||
, loadGame
|
||||
, saved
|
||||
|
||||
-- * Debug State
|
||||
, DebugState(..)
|
||||
, debugState
|
||||
, allRevealed
|
||||
) where
|
||||
--------------------------------------------------------------------------------
|
||||
import qualified Codec.Compression.Zlib as Zlib
|
||||
import Codec.Compression.Zlib.Internal (DecompressError)
|
||||
import qualified Data.Aeson as JSON
|
||||
import System.IO.Unsafe
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Prelude
|
||||
import Xanthous.Game.State
|
||||
import Xanthous.Game.Lenses
|
||||
import Xanthous.Game.Arbitrary ()
|
||||
import Xanthous.Entities.Entities ()
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
saveGame :: GameState -> LByteString
|
||||
saveGame = Zlib.compress . JSON.encode
|
||||
|
||||
loadGame :: LByteString -> Maybe GameState
|
||||
loadGame = JSON.decode <=< decompressZlibMay
|
||||
where
|
||||
decompressZlibMay bs
|
||||
= unsafeDupablePerformIO
|
||||
$ (let r = Zlib.decompress bs in r `seq` pure (Just r))
|
||||
`catch` \(_ :: DecompressError) -> pure Nothing
|
||||
|
||||
saved :: Prism' LByteString GameState
|
||||
saved = prism' saveGame loadGame
|
||||
Loading…
Add table
Add a link
Reference in a new issue