29 lines
870 B
Haskell
29 lines
870 B
Haskell
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
|
|
|