diff --git a/README.md b/README.md
index b82a687..832883e 100644
--- a/README.md
+++ b/README.md
@@ -282,8 +282,6 @@ These submodules are `Config`, `Data`, `Input`, `Parse` & `Render`. They are all
The following assets were used (and modified if specified):
- Kyrise's Free 16x16 RPG Icon Pack[[1]](#1)
-
- Every needed asset was taken and put into its own `.png`, instead of in the overview.
- 2D Pixel Dungeon Asset Pack by Pixel_Poem[[2]](#2)
diff --git a/assets/gui/health.png b/assets/gui/health.png
new file mode 100644
index 0000000..a2adeda
Binary files /dev/null and b/assets/gui/health.png differ
diff --git a/lib/RPGEngine/Render/Core.hs b/lib/RPGEngine/Render/Core.hs
index 014843e..e901243 100644
--- a/lib/RPGEngine/Render/Core.hs
+++ b/lib/RPGEngine/Render/Core.hs
@@ -42,14 +42,19 @@ allItems = [
("key", "key.png" )
]
+allGui :: [(String, FilePath)]
+allGui = [
+ ("health", "health.png")
+ ]
+
-- Map of all renders
library :: [(String, Picture)]
library = unknown:entities ++ environment ++ gui ++ items
where unknown = ("unknown", renderPNG (assetsFolder ++ unknownImage))
- entities = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "entities/" ++ s))) allEntities
+ entities = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "entities/" ++ s))) allEntities
environment = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "environment/" ++ s))) allEnvironment
- gui = []
- items = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "items/" ++ s))) allItems
+ gui = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "gui/" ++ s))) allGui
+ items = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "items/" ++ s))) allItems
------------------------------ Exported ------------------------------
diff --git a/lib/RPGEngine/Render/Playing.hs b/lib/RPGEngine/Render/Playing.hs
index b996d80..6a2f589 100644
--- a/lib/RPGEngine/Render/Playing.hs
+++ b/lib/RPGEngine/Render/Playing.hs
@@ -5,8 +5,9 @@ module RPGEngine.Render.Playing
import RPGEngine.Render.Core (Renderer, getRender, setRenderPos, overlay)
import RPGEngine.Config (resolution, zoom, uizoom)
-import RPGEngine.Data (State(..), Player (..), Game (..), Level (..), Layout, Physical (..), Item (..), Entity (..))
+import RPGEngine.Data (State(..), Player (..), Game (..), Level (..), Layout, Physical (..), Item (..), Entity (..), HP)
+import Data.Maybe ( fromJust )
import Graphics.Gloss ( pictures, Picture, translate, white )
import Graphics.Gloss.Data.Picture ( blank, text, color, scale )
@@ -23,9 +24,9 @@ renderPlaying _ = blank
------------------------------- Player -------------------------------
renderPlayer :: Renderer Player
-renderPlayer Player{ position = (x, y) } = move picture
- where move = setRenderPos x y
- picture = getRender "player"
+renderPlayer Player{ position = (x, y), playerHp = playerHp } = move picture
+ where move = setRenderPos x y
+ picture = withHealthBar playerHp $ getRender "player"
-- Center the player in the middle of the screen.
-- Not in use at the moment, might be useful later.
@@ -83,8 +84,8 @@ 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
+renderEntity Entity{ entityId = id, entityX = x, entityY = y, entityHp = hp} = setRenderPos x y image
+ where image = withHealthBar hp $ getRender id
renderInventory :: Player -> Picture
renderInventory Player{ showInventory = False } = blank
@@ -92,4 +93,19 @@ renderInventory Player{ inventory = list } = pictures [overlay, title, items]
where title = translate 0 (offset (-1)) $ scale uizoom uizoom $ color white $ text "Inventory"
items = pictures $ map move $ zip [0::Int ..] (map (getRender . itemId) list)
move (i, pic) = translate 0 (offset i) pic
- offset i = negate (zoom * resolution * fromIntegral i)
\ No newline at end of file
+ offset i = negate (zoom * resolution * fromIntegral i)
+
+withHealthBar :: HP -> Picture -> Picture
+withHealthBar (Nothing) renderedEntity = renderedEntity
+withHealthBar (Just hp) renderedEntity = pictures [renderedEntity, positionedBar]
+ where positionedBar = scale smaller smaller $ translate left up renderedBar
+ renderedBar = pictures [heart, counter]
+ heart = scale by by $ getRender "health"
+ counter = translate right down $ scale scaler scaler $ color white $ text $ show hp
+ left = negate $ uizoom * resolution * scaler
+ right = uizoom * resolution * 0.05
+ up = uizoom * resolution
+ down = negate $ resolution * uizoom * 0.15
+ smaller = resolution * uizoom
+ by = uizoom * 0.1
+ scaler = by * 0.5
\ No newline at end of file
diff --git a/verslag.pdf b/verslag.pdf
index 24a6e81..c974837 100644
Binary files a/verslag.pdf and b/verslag.pdf differ