aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan J. Martinez <jjm@usebox.net>2023-02-16 21:11:18 +0000
committerJuan J. Martinez <jjm@usebox.net>2023-02-16 21:11:18 +0000
commit1d68ac340c28792b2b498e204ef123730d901443 (patch)
tree840514d136efbfe57b1f1321cc0b3d82286fb188
parent11120a24b6927073d55d2e56b4b911817dedaae2 (diff)
downloadspace-plat-hs-1d68ac340c28792b2b498e204ef123730d901443.tar.gz
space-plat-hs-1d68ac340c28792b2b498e204ef123730d901443.zip
Added lives to the HUD
-rw-r--r--data/sprites.json6
-rw-r--r--data/sprites.pngbin10300 -> 10424 bytes
-rw-r--r--src/Game.hs7
-rw-r--r--src/Game/Hud.hs4
-rw-r--r--src/Game/State.hs4
5 files changed, 16 insertions, 5 deletions
diff --git a/data/sprites.json b/data/sprites.json
index e31c02e..a911207 100644
--- a/data/sprites.json
+++ b/data/sprites.json
@@ -37,10 +37,12 @@
"hud": {
"frames": [
{ "x": 48, "y": 24, "width": 8, "height": 8 },
- { "x": 56, "y": 24, "width": 8, "height": 8 }
+ { "x": 56, "y": 24, "width": 8, "height": 8 },
+ { "x": 48, "y": 32, "width": 8, "height": 8 },
+ { "x": 56, "y": 32, "width": 8, "height": 8 }
],
"sets": [
- [0, 1]
+ [0, 1, 2, 3]
]
}
}
diff --git a/data/sprites.png b/data/sprites.png
index 743964a..6b84a40 100644
--- a/data/sprites.png
+++ b/data/sprites.png
Binary files differ
diff --git a/src/Game.hs b/src/Game.hs
index a7454b8..bc604ad 100644
--- a/src/Game.hs
+++ b/src/Game.hs
@@ -26,6 +26,9 @@ gameWidth, gameHeight :: CInt
gameScale :: CInt
gameScale = 3
+maxLives :: Int
+maxLives = 4
+
windowWidth, windowHeight :: CInt
(windowWidth, windowHeight) = (gameWidth * gameScale, gameHeight * gameScale)
@@ -77,7 +80,9 @@ main = do
newIORef
GS.State
{ batteries = 0,
- totalBatteries = M.totalBatteries map'
+ totalBatteries = M.totalBatteries map',
+ lives = maxLives,
+ totalLives = maxLives
}
hud <- H.mkHud sprites state
entities <- newIORef =<< E.mkEntities sprites map' controls state
diff --git a/src/Game/Hud.hs b/src/Game/Hud.hs
index 3b59558..dd72bb3 100644
--- a/src/Game/Hud.hs
+++ b/src/Game/Hud.hs
@@ -19,4 +19,6 @@ render :: SDL.Renderer -> Hud -> IO ()
render renderer hud = do
state <- readIORef hud.stateRef
let xs = [0 .. state.totalBatteries - 1]
- mapM_ (\x -> S.render renderer hud.sprite (4 + x * 8) 178 0 (if state.batteries <= x then 0 else 1)) xs
+ in mapM_ (\x -> S.render renderer hud.sprite (4 + x * 8) 178 0 (if state.batteries <= x then 0 else 1)) xs
+ let xs = [0 .. state.totalLives - 1]
+ in mapM_ (\x -> S.render renderer hud.sprite (320 - 4 - state.totalLives * 8 + x * 8) 178 0 (if state.lives <= x then 2 else 3)) xs
diff --git a/src/Game/State.hs b/src/Game/State.hs
index 9988936..2223434 100644
--- a/src/Game/State.hs
+++ b/src/Game/State.hs
@@ -2,5 +2,7 @@ module Game.State (State (..)) where
data State = State
{ batteries :: Int,
- totalBatteries :: Int
+ totalBatteries :: Int,
+ lives :: Int,
+ totalLives :: Int
}