diff --git a/src/coffin.py b/src/coffin.py index 5d89c09..ef7a11a 100644 --- a/src/coffin.py +++ b/src/coffin.py @@ -55,7 +55,10 @@ class CoffinObject(Object): self.yPos, item_type, self.sounds, - direction + direction, + self.level.leftBoundary, + self.level.rightBoundary ) + return True return False diff --git a/src/enemy.py b/src/enemy.py index bbc2097..ab4bb6f 100644 --- a/src/enemy.py +++ b/src/enemy.py @@ -175,7 +175,9 @@ class Enemy(Object): self.yPos, itemType, self.sounds, - direction + direction, + self.level.leftBoundary, + self.level.rightBoundary ) self.level.bouncing_items.append(droppedItem) diff --git a/src/level.py b/src/level.py index 7c39c8f..b444717 100644 --- a/src/level.py +++ b/src/level.py @@ -265,7 +265,7 @@ class Level: obj.xPos >= attackRange[0] and obj.xPos <= attackRange[1] and self.player.isJumping): # Must be jumping to hit floating coffins - + if obj.hit(self.player.xPos): self.bouncing_items.append(obj.dropped_item) @@ -368,7 +368,8 @@ class Level: play_sound(self.sounds[f'get_{obj.graveItem}']) self.player.stats.update_stat('Items collected', 1) # Create PowerUp to handle the item effect - item = PowerUp(obj.xPos, obj.yPos, obj.graveItem, self.sounds, 1) + item = PowerUp(obj.xPos, obj.yPos, obj.graveItem, self.sounds, 1, + self.leftBoundary, self.rightBoundary) item.apply_effect(self.player) # Stop grave's current audio channel if obj.channel: diff --git a/src/powerup.py b/src/powerup.py index 77bcd25..7073f36 100644 --- a/src/powerup.py +++ b/src/powerup.py @@ -3,7 +3,7 @@ from src.object import Object from src.weapon import Weapon class PowerUp(Object): - def __init__(self, x, y, item_type, sounds, direction): + def __init__(self, x, y, item_type, sounds, direction, left_boundary=1, right_boundary=100): super().__init__( x, y, item_type, isStatic=False, @@ -12,38 +12,45 @@ class PowerUp(Object): ) self.sounds = sounds self.direction = direction - self.speed = 0.055 # Base movement speed + self.speed = 0.0525 # Base movement speed self.item_type = item_type self.channel = None self._currentX = x # Initialize the current x position - + self.left_boundary = left_boundary + self.right_boundary = right_boundary + def update(self, current_time, player_pos): - """Update item position - - Args: - current_time: Current game time in milliseconds - player_pos: Current player x position - """ + """Update item position""" if not self.isActive: return False - + # Update position - self._currentX += self.direction * self.speed + new_x = self._currentX + self.direction * self.speed + # Check boundaries and bounce if needed + if new_x < self.left_boundary: + self._currentX = self.left_boundary + self.direction = 1 # Start moving right + elif new_x > self.right_boundary: + self._currentX = self.right_boundary + self.direction = -1 # Start moving left + else: + self._currentX = new_x + # Update positional audio if self.channel is None or not self.channel.get_busy(): self.channel = obj_play(self.sounds, "item_bounce", player_pos, self._currentX) else: self.channel = obj_update(self.channel, player_pos, self._currentX) - - # Check if item has gone too far (12 tiles) + + # Check if item is too far from player (12 tiles) if abs(self._currentX - player_pos) > 12: self.isActive = False if self.channel: self.channel.stop() self.channel = None return False - + return True def apply_effect(self, player):