82 lines
No EOL
2.1 KiB
Haskell
82 lines
No EOL
2.1 KiB
Haskell
-- Allows to render the played game
|
|
|
|
module RPGEngine.Render
|
|
( initWindow
|
|
, bgColor
|
|
|
|
, render
|
|
) where
|
|
|
|
import RPGEngine.Data
|
|
( State(..),
|
|
Game(..), Player (..) )
|
|
import RPGEngine.Render.Level
|
|
( renderLevel )
|
|
import Graphics.Gloss
|
|
( white,
|
|
pictures,
|
|
text,
|
|
Display(InWindow),
|
|
Color,
|
|
Picture,
|
|
scale,
|
|
translate )
|
|
import RPGEngine.Render.Player (renderPlayer, focusPlayer)
|
|
import RPGEngine.Render.GUI (renderGUI)
|
|
import Graphics.Gloss.Data.Picture (color)
|
|
import RPGEngine.Render.Core (overlay)
|
|
import RPGEngine.Input.LvlSelect (getLvlList)
|
|
import RPGEngine.Render.LvlSelect (renderLvlList)
|
|
|
|
----------------------------- Constants ------------------------------
|
|
|
|
-- Game background color
|
|
bgColor :: Color
|
|
bgColor = white
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
-- Initialize a window to play in
|
|
initWindow :: String -> (Int, Int) -> (Int, Int) -> Display
|
|
initWindow = InWindow
|
|
|
|
-- Render the game
|
|
render :: Game -> Picture
|
|
render g@Game{ state = Menu } = renderMenu g
|
|
render g@Game{ state = LvlSelect } = renderLevelSelection g
|
|
render g@Game{ state = Playing } = renderPlaying g
|
|
render g@Game{ state = Pause } = renderPause g
|
|
render g@Game{ state = Win } = renderWin g
|
|
render g@Game{ state = Lose } = renderLose g
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
-- TODO
|
|
renderMenu :: Game -> Picture
|
|
renderMenu _ = text "[Press any key to start]"
|
|
|
|
-- TODO
|
|
renderLevelSelection :: Game -> Picture
|
|
renderLevelSelection _ = renderLvlList getLvlList
|
|
|
|
renderPlaying :: Game -> Picture
|
|
renderPlaying g@Game{ playing = lvl, player = player } = pictures [
|
|
renderLevel lvl,
|
|
renderPlayer player,
|
|
renderGUI g
|
|
]
|
|
|
|
renderPause :: Game -> Picture
|
|
renderPause g = pictures [renderPlaying g, pause]
|
|
where pause = pictures [
|
|
overlay,
|
|
color white $ scale 0.5 0.5 $ text "[Press any key to continue]"
|
|
]
|
|
|
|
-- TODO
|
|
renderWin :: Game -> Picture
|
|
renderWin _ = text "Win"
|
|
|
|
-- TODO
|
|
renderLose :: Game -> Picture
|
|
renderLose _ = text "Lose" |