Work on saving/loading concurrently
This commit is contained in:
+16
-18
@@ -1,30 +1,28 @@
|
||||
module Dodge.StartNewGame where
|
||||
module Dodge.StartNewGame (
|
||||
startNewGameInSlot,
|
||||
startSeedGame,
|
||||
) where
|
||||
|
||||
import Dodge.Save
|
||||
import Dodge.Concurrent
|
||||
--import Dodge.Menu.Option
|
||||
import Control.Lens
|
||||
import Dodge.Data.Universe
|
||||
import Dodge.LevelGen
|
||||
import Dodge.Save
|
||||
import System.Random
|
||||
|
||||
startNewGame :: Universe -> Universe
|
||||
startNewGame u = case u ^. uvWorld . gameSlot of
|
||||
GameNum i -> startNewGameInSlot i u
|
||||
GameLoading{} -> u
|
||||
GameStartScreen -> startNewGameInSlot 0 u -- this needs to be changed
|
||||
|
||||
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 slot i u =
|
||||
u
|
||||
& menuLayers .~ [WaitScreen (const "GENERATING...") 1]
|
||||
& uvIOEffects .~ \_ -> do
|
||||
w <- generateWorldFromSeed i
|
||||
return $
|
||||
u & menuLayers .~ [] & uvWorld .~ w
|
||||
& uvWorld . gameSlot .~ GameNum slot
|
||||
& saveWorldInSlot (LevelStartSlot slot)
|
||||
-- & savedWorlds . at LevelStartSlot ?~ w
|
||||
startSeedGame _ i = tryConcEffect True "GENERATING" (startSeedGameConc i)
|
||||
|
||||
startSeedGameConc :: Int -> IO (Universe -> Maybe Universe)
|
||||
startSeedGameConc seed = do
|
||||
w <- generateWorldFromSeed seed
|
||||
return $ Just
|
||||
. saveWorldInSlot (LevelStartSlot 0)
|
||||
. (uvScreenLayers .~ [])
|
||||
. (uvWorld .~ w)
|
||||
|
||||
Reference in New Issue
Block a user