Restructuring, #9

This commit is contained in:
Tibo De Peuter 2022-12-21 23:30:59 +01:00
parent 2055ef234e
commit dab6fadad4
41 changed files with 941 additions and 680 deletions

View file

@ -1,38 +1,21 @@
-- Allows to render the played game
-- Implementation for each state can be found in their respective
-- submodules.
module RPGEngine.Render
( initWindow
, bgColor
, initGame
, 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)
import RPGEngine.Render.Core ( Renderer(..) )
----------------------------- Constants ------------------------------
-- Game background color
bgColor :: Color
bgColor = white
import RPGEngine.Data ( State(..), Game(..), StateBase(..) )
import Graphics.Gloss ( Display )
import Graphics.Gloss.Data.Display ( Display(InWindow) )
import Graphics.Gloss.Data.Picture (Picture)
import RPGEngine.Data.Default (defaultLevel, defaultPlayer)
import RPGEngine.Input.Playing (spawnPlayer)
import RPGEngine.Render.Menu (renderMenu)
import RPGEngine.Input.Menu (handleInputMenu)
----------------------------------------------------------------------
@ -40,43 +23,16 @@ bgColor = white
initWindow :: String -> (Int, Int) -> (Int, Int) -> Display
initWindow = InWindow
-- Render the game
-- Initialize the game
initGame :: Game
initGame = Game {
state = Menu{ base = StateBase{ renderer = renderMenu, inputHandler = handleInputMenu }},
levels = [defaultLevel],
player = spawnPlayer defaultLevel defaultPlayer
}
-- Render all different states
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"
render g@Game{ state = state } = renderFunc g
where stateBase = base state
renderFunc = renderer stateBase