Files
loop/src/Dodge/StartNewGame.hs
T

38 lines
1.0 KiB
Haskell

module Dodge.StartNewGame (
startNewGameInSlot,
startSeedGame,
) where
import Dodge.Concurrent
import Dodge.Data.Universe
import Dodge.LevelGen
import Dodge.Save
import Dodge.WorldLoad
import LensHelp
import System.Random
import System.Directory
startNewGameInSlot :: Int -> Universe -> Universe
startNewGameInSlot slot u = startSeedGame slot i u
where
i = fst $ randomR (0, maxBound) (_randGen (_uvWorld u))
startSeedGame :: Int -> Int -> Universe -> Universe
startSeedGame _ i u =
blockingLoad
("GENERATING FROM SEED " ++ show i)
(startSeedGameConc i $ u ^. preloadData)
u
startSeedGameConc :: Int -> PreloadData -> IO (Universe -> Maybe Universe)
startSeedGameConc seed pdata = do
w <- generateWorldFromSeed (pdata ^?! renderData) seed
createDirectoryIfMissing True "saveSlot"
writeFile "saveSlot/seed" $ show seed
return $
Just
. saveWorldInSlot (LevelStartSlot 0)
. (uvScreenLayers .~ [])
. (uvWorld .~ w)
. postUniverseLoadSideEffect