module Dodge.StartNewGame where import Control.Lens import Dodge.Data.Universe import Dodge.LevelGen import System.Random startNewGame :: Universe -> Universe startNewGame u = startSeedGame i u where i = fst $ randomR (0, maxBound) (_randGen (_uvWorld u)) startSeedGame :: Int -> Universe -> Universe startSeedGame i u = u & menuLayers .~ [WaitScreen (const "GENERATING...") 1] & uvIOEffects .~ \_ -> do w <- generateWorldFromSeed i return $ u & menuLayers .~ [] & uvWorld .~ w & savedWorlds . at LevelStartSlot ?~ w