aboutsummaryrefslogtreecommitdiff
path: root/src/Game/Entities/Tracker.hs
diff options
context:
space:
mode:
authorJuan J. Martinez <jjm@usebox.net>2023-04-25 22:18:54 +0100
committerJuan J. Martinez <jjm@usebox.net>2023-04-25 22:18:54 +0100
commit1cd60a951b2c2f83b927a6b6961cbd3206bf5316 (patch)
tree59861ba4125ed15ff8711ccd55e4b5a24fd3235c /src/Game/Entities/Tracker.hs
parenta5ac165b1e9adbdf459ebc9df42edc024389e9b8 (diff)
downloadspace-plat-hs-1cd60a951b2c2f83b927a6b6961cbd3206bf5316.tar.gz
space-plat-hs-1cd60a951b2c2f83b927a6b6961cbd3206bf5316.zip
Added "tracker" enemy
Diffstat (limited to 'src/Game/Entities/Tracker.hs')
-rw-r--r--src/Game/Entities/Tracker.hs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/Game/Entities/Tracker.hs b/src/Game/Entities/Tracker.hs
new file mode 100644
index 0000000..ef7325f
--- /dev/null
+++ b/src/Game/Entities/Tracker.hs
@@ -0,0 +1,26 @@
+module Game.Entities.Tracker (mkTracker) where
+
+import Game.Entities.Const
+import Game.Entities.Runner
+import Game.Entities.Types
+import qualified Game.Sprites as S
+
+mkTracker :: S.SpriteSheet -> Int -> Int -> Dir -> Collision -> Collision -> IsBlocked -> IO Entity
+mkTracker sprites x y d playerCollision facingPlayerLower isBlocked = do
+ s <- S.get sprites "tracker"
+ runner <- mkRunner sprites x y d playerCollision isBlocked
+ pure runner {sprite = s, update = updateTracker runner.update facingPlayerLower isBlocked}
+
+updateTracker :: (Entity -> IO Entity) -> Collision -> IsBlocked -> Entity -> IO Entity
+updateTracker updateRunner facingPlayerLower isBlocked ent = do
+ e <- updateRunner ent
+ facing <- facingPlayerLower e
+ pure $
+ if facing && e.gravity == gravityOff && not (isBlocked (ent.x + 8) (ent.y - 1)) && isBlocked (ent.x + 8) ent.y
+ then
+ e
+ { gravity = gravityUp,
+ frame = jumpFrame,
+ actions = [ActionAddEffect ent.x (ent.y + 8) "dust"]
+ }
+ else e