24 lines
846 B
Haskell
24 lines
846 B
Haskell
module Dodge.WorldLoad (postUniverseLoadSideEffect) 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
|