{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE RankNTypes #-} -- | deals with placement of objects within the world -- after they have had their coordinates set by the layout module Dodge.LevelGen where import Dodge.Data import Dodge.Floor import Dodge.Layout import Dodge.Initialisation import Dodge.RandomHelp import System.Random import Control.Lens import Control.Monad.State generateWorldFromSeed :: Int -> IO World generateWorldFromSeed i = do roomList <- layoutLevelFromSeed 0 i return $ randomCompass $ generateLevelFromRoomList roomList initialWorld{_randGen=mkStdGen i} randomCompass :: World -> World randomCompass w = w & cameraRot .~ (takeOne [0,0.5*pi,pi,1.5*pi] & evalState $ _randGen w)