53 lines
No EOL
2 KiB
Haskell
53 lines
No EOL
2 KiB
Haskell
module RPGEngine.Render.Level
|
|
( renderLevel
|
|
) where
|
|
|
|
import Graphics.Gloss
|
|
import RPGEngine.Data
|
|
import RPGEngine.Render.Core (getRender, setRenderPos, zoom, resolution)
|
|
|
|
renderLevel :: Level -> Picture
|
|
renderLevel Level{ layout = l, items = i, entities = e } = level
|
|
where level = pictures [void, layout, items, entities]
|
|
void = createVoid
|
|
layout = renderLayout l
|
|
items = renderItems i
|
|
entities = renderEntities e
|
|
|
|
renderLayout :: Layout -> Picture
|
|
renderLayout strips = pictures [setRenderPos 0 y (renderStrip (strips !! y)) | y <- [0 .. count]]
|
|
where count = length strips - 1
|
|
|
|
renderStrip :: [Physical] -> Picture
|
|
renderStrip list = pictures physicals
|
|
where physicals = [setRenderPos x 0 (image (list !! x)) | x <- [0 .. count]]
|
|
image Void = getRender "void"
|
|
image Walkable = getRender "tile"
|
|
image Blocked = getRender "wall"
|
|
image Entrance = pictures [getRender "tile", getRender "entrance"]
|
|
image Exit = pictures [getRender "tile", getRender "exit"]
|
|
count = length list - 1
|
|
|
|
renderItems :: [Item] -> Picture
|
|
renderItems list = pictures $ map renderItem list
|
|
|
|
renderItem :: Item -> Picture
|
|
renderItem Item{ itemId = id, itemX = x, itemY = y} = setRenderPos x y image
|
|
where image = getRender id
|
|
|
|
renderEntities :: [Entity] -> Picture
|
|
renderEntities list = pictures $ map renderEntity list
|
|
|
|
renderEntity :: Entity -> Picture
|
|
renderEntity Entity{ entityId = id, entityX = x, entityY = y} = setRenderPos x y image
|
|
where image = getRender id
|
|
|
|
createVoid :: Picture
|
|
createVoid = setRenderPos offX offY $ pictures voids
|
|
where voids = [setRenderPos x y void | x <- [0 .. width], y <- [0 .. height]]
|
|
void = getRender "void"
|
|
intZoom = round zoom :: Int
|
|
height = round $ 4320 / resolution / zoom
|
|
width = round $ 7680 / resolution / zoom
|
|
offX = negate (width `div` 2)
|
|
offY = negate (height `div` 2) |