module Dodge.WorldLoad where import Control.Lens import Control.Monad import Data.Preload.Render import Dodge.Data.Universe import Shader.Bind import Shader.Data import Shader.Poke.Floor postUniverseLoadSideEffect :: Universe -> Universe postUniverseLoadSideEffect = uvIOEffects %~ (\f uv -> (uvWorld . cWorld) (postWorldLoad (uv ^. preloadData . renderData)) uv >>= f) postWorldLoad :: RenderData -> CWorld -> IO CWorld postWorldLoad rdata cw = do nfloorvxs <- foldM (pokeTile (rdata ^. floorVBO . vboPtr)) 0 (cw ^. cwTiles) bufferPokedVBO (rdata ^. floorVBO) nfloorvxs nchasmvxs <- foldM (pokeChasm (rdata ^. chasmVBO . vboPtr)) 0 (cw ^. chasms) bufferPokedVBO (rdata ^. chasmVBO) nchasmvxs return $ cw & numberFloorVerxs .~ nfloorvxs & numberChasmVerxs .~ nchasmvxs