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