parent
de02c7113f
commit
fb4bc5bb36
12 changed files with 158 additions and 9 deletions
63
lib/RPGEngine/Render/Core.hs
Normal file
63
lib/RPGEngine/Render/Core.hs
Normal file
|
@ -0,0 +1,63 @@
|
|||
module RPGEngine.Render.Core where
|
||||
|
||||
import Graphics.Gloss ( Picture, translate )
|
||||
import GHC.IO (unsafePerformIO)
|
||||
import Graphics.Gloss.Juicy (loadJuicyPNG)
|
||||
import Data.Maybe (fromJust)
|
||||
import Graphics.Gloss.Data.Picture (scale)
|
||||
|
||||
----------------------------- Constants ------------------------------
|
||||
|
||||
-- Default scale
|
||||
zoom :: Float
|
||||
zoom = 5.0
|
||||
|
||||
-- Resolution of the texture
|
||||
resolution :: Float
|
||||
resolution = 16
|
||||
|
||||
assetsFolder :: FilePath
|
||||
assetsFolder = "assets/"
|
||||
|
||||
unknownImage :: FilePath
|
||||
unknownImage = "unkown.png"
|
||||
|
||||
allEntities :: [(String, FilePath)]
|
||||
allEntities = [
|
||||
("player", "player.png"),
|
||||
("door", "door.png")
|
||||
]
|
||||
|
||||
allItems :: [(String, FilePath)]
|
||||
allItems = [
|
||||
("dagger", "dagger.png"),
|
||||
("key", "key.png" )
|
||||
]
|
||||
|
||||
-- Map of all renders
|
||||
library :: [(String, Picture)]
|
||||
library = unknown:entities ++ environment ++ gui ++ items
|
||||
where unknown = ("unkown", renderPNG (assetsFolder ++ unknownImage))
|
||||
entities = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "entities/" ++ s))) allEntities
|
||||
environment = []
|
||||
gui = []
|
||||
items = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "items/" ++ s))) allItems
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
-- Turn a path to a .png file into a Picture.
|
||||
renderPNG :: FilePath -> Picture
|
||||
renderPNG path = scale zoom zoom $ fromJust $ unsafePerformIO $ loadJuicyPNG path
|
||||
|
||||
-- Retrieve an image from the library. If the library does not contain
|
||||
-- the requested image, a default is returned.
|
||||
getRender :: String -> Picture
|
||||
getRender id = get filtered
|
||||
where filtered = filter ((== id) . fst) library
|
||||
get [] = snd $ head library
|
||||
get ((_, res):_) = res
|
||||
|
||||
setRenderPos :: Int -> Int -> Picture -> Picture
|
||||
setRenderPos x y = translate floatX floatY
|
||||
where floatX = fromIntegral x * zoom * resolution
|
||||
floatY = fromIntegral y * zoom * resolution
|
10
lib/RPGEngine/Render/GUI.hs
Normal file
10
lib/RPGEngine/Render/GUI.hs
Normal file
|
@ -0,0 +1,10 @@
|
|||
module RPGEngine.Render.GUI
|
||||
( renderGUI
|
||||
) where
|
||||
|
||||
import RPGEngine.Data (Game)
|
||||
import Graphics.Gloss (Picture, blank)
|
||||
|
||||
-- TODO
|
||||
renderGUI :: Game -> Picture
|
||||
renderGUI _ = blank
|
10
lib/RPGEngine/Render/Level.hs
Normal file
10
lib/RPGEngine/Render/Level.hs
Normal file
|
@ -0,0 +1,10 @@
|
|||
module RPGEngine.Render.Level
|
||||
( renderLevel
|
||||
) where
|
||||
|
||||
import Graphics.Gloss
|
||||
import RPGEngine.Data
|
||||
|
||||
-- TODO
|
||||
renderLevel :: Level -> Picture
|
||||
renderLevel _ = text "Level"
|
11
lib/RPGEngine/Render/Player.hs
Normal file
11
lib/RPGEngine/Render/Player.hs
Normal file
|
@ -0,0 +1,11 @@
|
|||
module RPGEngine.Render.Player
|
||||
( renderPlayer
|
||||
) where
|
||||
|
||||
import RPGEngine.Data (Player(..))
|
||||
|
||||
import Graphics.Gloss (Picture, text)
|
||||
import RPGEngine.Render.Core (getRender, setRenderPos)
|
||||
|
||||
renderPlayer :: Player -> Picture
|
||||
renderPlayer Player{ coord = (x, y) } = setRenderPos x y $ getRender "player"
|
Reference in a new issue