module Game.Entities.Pickup (mkBattery) where import Game.Entities.Common import Game.Entities.Const import Game.Entities.Types import qualified Game.Sprites as S mkBattery :: S.SpriteSheet -> Int -> Int -> Collision -> IO () -> IO Entity mkBattery sprites x y playerCollision collectedBattery' = do s <- S.get sprites "battery" pure Entity { typ = TypePickup, x = x, y = y, delay = frameDelay, frame = 0, jumping = False, gravity = gravityOff, dir = DirRight, sprite = s, update = updateBattery playerCollision collectedBattery', destroy = False, spawns = [] } updateBattery :: Collision -> IO () -> Entity -> IO Entity updateBattery touchedPlayer collectedBattery' e = do touched <- touchedPlayer e if touched then e {destroy = True} <$ collectedBattery' else pure updateBatteryFrame where updateBatteryFrame :: Entity updateBatteryFrame | e.delay > 0 = e {delay = e.delay - 1} | e.frame + 1 < frameLimit e = e {delay = frameDelay, frame = e.frame + 1} | otherwise = e {delay = frameDelay, frame = 0}