aboutsummaryrefslogtreecommitdiff
path: root/src/Game/Hud.hs
diff options
context:
space:
mode:
authorJuan J. Martinez <jjm@usebox.net>2023-03-02 12:54:47 +0000
committerJuan J. Martinez <jjm@usebox.net>2023-03-02 12:54:47 +0000
commite5cbf917ad8b12b48932bc4fa13a044bc8159a74 (patch)
tree41511ca9f1447643ac921b2294f5dab8a62731e2 /src/Game/Hud.hs
parent5dd9180606e935ee5a7c1637773fdfc3277677ca (diff)
downloadspace-plat-hs-e5cbf917ad8b12b48932bc4fa13a044bc8159a74.tar.gz
space-plat-hs-e5cbf917ad8b12b48932bc4fa13a044bc8159a74.zip
Even less IORef
Also reviewed comments and made the action to add effects more general.
Diffstat (limited to 'src/Game/Hud.hs')
-rw-r--r--src/Game/Hud.hs22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/Game/Hud.hs b/src/Game/Hud.hs
index 880de50..a5d3e22 100644
--- a/src/Game/Hud.hs
+++ b/src/Game/Hud.hs
@@ -1,6 +1,5 @@
module Game.Hud (Hud, mkHud, render, height) where
-import Data.IORef
import qualified Game.Sprites as S
import qualified Game.State as GS
import qualified SDL
@@ -8,21 +7,16 @@ import qualified SDL
height :: Int
height = 16
-data Hud = Hud
- { sprite :: S.Sprite,
- stateRef :: IORef GS.State
- }
+newtype Hud = Hud S.Sprite
-mkHud :: S.SpriteSheet -> IORef GS.State -> IO Hud
-mkHud sprites stateRef = do
- sprite <- S.get sprites "hud"
- pure Hud {sprite = sprite, stateRef = stateRef}
+mkHud :: S.SpriteSheet -> IO Hud
+mkHud sprites = do
+ Hud <$> S.get sprites "hud"
-render :: SDL.Renderer -> Hud -> IO ()
-render renderer hud = do
- state <- readIORef hud.stateRef
+render :: SDL.Renderer -> Hud -> GS.State -> IO ()
+render renderer (Hud sprite) state = do
let xs = [0 .. state.totalBatteries - 1]
- in mapM_ (\x -> S.render renderer hud.sprite (4 + x * 8) 4 0 (if state.batteries <= x then 0 else 1)) xs
+ in mapM_ (\x -> S.render renderer sprite (4 + x * 8) 4 0 (if state.batteries <= x then 0 else 1)) xs
let xs = [0 .. state.totalLives - 1]
in -- magic numbers
- mapM_ (\x -> S.render renderer hud.sprite (320 - 4 - state.totalLives * 8 + x * 8) 4 0 (if state.lives <= x then 2 else 3)) xs
+ mapM_ (\x -> S.render renderer sprite (320 - 4 - state.totalLives * 8 + x * 8) 4 0 (if state.lives <= x then 2 else 3)) xs