From 7a714cc457323bff6b4a73ec9e7b58c7a63381ec Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Sun, 5 Mar 2023 14:55:25 +0000 Subject: Exit placement on the last battery --- src/Game/Entities.hs | 10 ++++------ src/Game/Entities/Pickup.hs | 2 +- src/Game/Entities/Types.hs | 2 +- src/Game/State.hs | 3 ++- 4 files changed, 8 insertions(+), 9 deletions(-) (limited to 'src/Game') diff --git a/src/Game/Entities.hs b/src/Game/Entities.hs index 2cfdd76..21b6ba5 100644 --- a/src/Game/Entities.hs +++ b/src/Game/Entities.hs @@ -53,12 +53,10 @@ playerPosition (Entities _ _ entities) = where player = head entities -addExit :: Entities -> IO Entities -addExit es = do +addExit :: Entities -> Int -> Int -> IO Entities +addExit es x y = do exit <- mkExit es.sprites x y (collision es.player 24) pure es {entities = es.entities ++ [exit]} - where - (x, y) = playerPosition es updateAll :: Entities -> GS.State -> IO (Entities, GS.State) updateAll es state = do @@ -86,8 +84,8 @@ updateAll es state = do ActionAddEffect x y name -> do effect <- mkEffect es.sprites x y name processActions s (ents ++ [effect]) t - ActionAddBattery -> - processActions s {GS.batteries = s.batteries + 1} ents t + ActionAddBattery x y -> + processActions s {GS.batteries = s.batteries + 1, GS.lastBattery = (x, y)} ents t ActionHitPlayer -> do let (s', ents') = if s.lives == 1 diff --git a/src/Game/Entities/Pickup.hs b/src/Game/Entities/Pickup.hs index 7c1937c..a933efc 100644 --- a/src/Game/Entities/Pickup.hs +++ b/src/Game/Entities/Pickup.hs @@ -27,7 +27,7 @@ mkBattery sprites x y playerCollision = do updateBattery :: Collision -> Entity -> IO Entity updateBattery touchedPlayer e = do touched <- touchedPlayer e - pure $ if touched then e {destroy = True, actions = [ActionAddBattery]} else updateBatteryFrame + pure $ if touched then e {destroy = True, actions = [ActionAddBattery e.x e.y]} else updateBatteryFrame where updateBatteryFrame :: Entity updateBatteryFrame diff --git a/src/Game/Entities/Types.hs b/src/Game/Entities/Types.hs index dce4ffa..64b4637 100644 --- a/src/Game/Entities/Types.hs +++ b/src/Game/Entities/Types.hs @@ -29,7 +29,7 @@ data Entities = Entities -- | The effect name must match the sprite name in the spritesheet. type EffectName = String -data Action = ActionAddEffect Int Int EffectName | ActionAddBattery | ActionHitPlayer +data Action = ActionAddEffect Int Int EffectName | ActionAddBattery Int Int | ActionHitPlayer data Entity = Entity { typ :: Type, diff --git a/src/Game/State.hs b/src/Game/State.hs index 8987a2e..840c0ae 100644 --- a/src/Game/State.hs +++ b/src/Game/State.hs @@ -7,5 +7,6 @@ data State = State totalLives :: Int, hitDelay :: Int, gameOverDelay :: Int, - exit :: Bool + exit :: Bool, + lastBattery :: (Int, Int) } -- cgit v1.2.3