#6 Win/End state #8 End screen #9 level selection

This commit is contained in:
Tibo De Peuter 2022-12-22 16:25:29 +01:00
parent becd305e01
commit 5cc96cbdba
10 changed files with 53 additions and 21 deletions

BIN
assets/gui/main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -23,6 +23,10 @@ bgColor = makeColor (37 / 256) (19 / 256) (26 / 256) 1
textColor :: Color
textColor = white
-- Color of selection
selectionColor :: Color
selectionColor = red
-- Default scale
zoom :: Float
zoom = 5

View file

@ -5,7 +5,7 @@ module RPGEngine.Data.Game
) where
import RPGEngine.Data
( Player(Player, position),
( Player(..),
Direction,
Physical(Exit, Walkable, Entrance),
State(..),
@ -33,4 +33,5 @@ isPlayerAtExit _ = False
-- Check if the players health is <= 0, which means the player is dead.
isPlayerDead :: Game -> Bool
isPlayerDead _ = False
isPlayerDead g@Game{ state = Playing{ player = Player{ playerHp = (Just hp)}}} = hp <= 0
isPlayerDead _ = False

View file

@ -2,11 +2,16 @@ module RPGEngine.Input.Lose
( handleInputLose
) where
import RPGEngine.Input.Core (InputHandler)
import RPGEngine.Input.Core (InputHandler, handleAnyKey)
import RPGEngine.Data (Game)
import RPGEngine.Data (Game(..), State(..))
------------------------------ Exported ------------------------------
handleInputLose :: InputHandler Game
handleInputLose = undefined
handleInputLose = handleAnyKey retry
----------------------------------------------------------------------
retry :: Game -> Game
retry g@Game{ state = Lose{ restart = restart }} = g{ state = restart }

View file

@ -50,7 +50,7 @@ checkPlaying g@Game{ state = s@Playing{ restart = restart }} = newGame
where newGame | isPlayerDead g = loseGame
| isPlayerAtExit g = g{ state = goToNextLevel s }
| otherwise = g
loseGame = g{ state = restart }
loseGame = g{ state = Lose{ restart = restart }}
checkPlaying g = g
pauseGame :: Game -> Game

View file

@ -44,6 +44,7 @@ allItems = [
allGui :: [(String, FilePath)]
allGui = [
("main", "main.png"),
("health", "health.png")
]

View file

@ -4,7 +4,7 @@ module RPGEngine.Render.LevelSelection
import RPGEngine.Render.Core (Renderer)
import RPGEngine.Config (resolution, zoom, uizoom)
import RPGEngine.Config (resolution, zoom, uizoom, textColor, selectionColor )
import RPGEngine.Data (State (..))
import Graphics.Gloss ( pictures, color, text, translate, blank )
@ -25,7 +25,8 @@ renderLevelList LevelSelection{ levelList = list, selector = selector } = everyt
where everything = pictures $ map render entries
sel = selection selector
entries = zip [0::Int .. ] list
render (i, path) | i == sel = color red $ scale uizoom uizoom $ translate 0 (offset i) $ text path
| otherwise = scale uizoom uizoom $ translate 0 (offset i) $ text path
render (i, path) | i == sel = color selectionColor $ make (i, path)
| otherwise = color textColor $ make (i, path)
make (i, path) = scale uizoom uizoom $ translate 0 (offset i) $ text path
offset i = negate (250 * uizoom * fromIntegral i)
renderLevelList _ = blank

View file

@ -1,15 +1,21 @@
module RPGEngine.Render.Lose
( renderLose
) where
import RPGEngine.Render.Core (Renderer)
import RPGEngine.Config (uizoom, textColor)
import RPGEngine.Data (State)
import Graphics.Gloss (text)
import Graphics.Gloss (text, scale, color, translate)
------------------------------ Constants -----------------------------
message :: String
message = "You lose! Press any key to retry."
------------------------------ Exported ------------------------------
-- TODO
renderLose :: Renderer State
renderLose _ = text "You lose"
renderLose _ = scaled $ center $ color textColor $ text message
where scaled = scale uizoom uizoom
center = translate (-1200) 0

View file

@ -2,16 +2,23 @@ module RPGEngine.Render.Menu
( renderMenu
) where
import RPGEngine.Render.Core (Renderer)
import RPGEngine.Render.Core (Renderer, getRender)
import RPGEngine.Config ( uizoom, textColor )
import RPGEngine.Data (State)
import Graphics.Gloss (text, scale, color, white, translate)
import Graphics.Gloss (text, scale, color, translate, pictures)
------------------------------ Constants -----------------------------
message :: String
message = "[Press any key to start]"
------------------------------ Exported ------------------------------
renderMenu :: Renderer State
renderMenu _ = scaled $ center $ color textColor $ text "[Press any key to start]"
where scaled = scale uizoom uizoom
center = translate (-750) 0
renderMenu _ = pictures [main, pressAny]
where pressAny = scaled $ center $ color textColor $ text message
scaled = scale uizoom uizoom
center = translate (-800) (-320)
main = getRender "main"

View file

@ -4,12 +4,19 @@ module RPGEngine.Render.Win
import RPGEngine.Render.Core (Renderer)
import RPGEngine.Config (uizoom, textColor)
import RPGEngine.Data (State)
import Graphics.Gloss (text)
import Graphics.Gloss (text, scale, color, translate)
------------------------------ Constants -----------------------------
message :: String
message = "You win! Press any key to return to the menu."
------------------------------ Exported ------------------------------
-- TODO
renderWin :: Renderer State
renderWin _ = text "You win!\nPress any key to return to the menu."
renderWin _ = scaled $ center $ color textColor $ text message
where scaled = scale uizoom uizoom
center = translate (-1500) 0