Code cleanup, added more functionality. Floating coffins that spawn items, graves can spawn zombies, etc.
This commit is contained in:
52
src/powerup.py
Normal file
52
src/powerup.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from libstormgames import *
|
||||
from src.object import Object
|
||||
|
||||
class PowerUp(Object):
|
||||
def __init__(self, x, y, item_type, sounds, direction):
|
||||
super().__init__(
|
||||
x, y, item_type,
|
||||
isStatic=False,
|
||||
isCollectible=True,
|
||||
isHazard=False
|
||||
)
|
||||
self.sounds = sounds
|
||||
self.direction = direction
|
||||
self.speed = 0.05 # Base movement speed
|
||||
self.item_type = item_type
|
||||
self.channel = None
|
||||
|
||||
def update(self, current_time):
|
||||
"""Update item position"""
|
||||
if not self.isActive:
|
||||
return False
|
||||
|
||||
# Update position
|
||||
self._currentX += self.direction * self.speed
|
||||
|
||||
# Keep bounce sound playing while moving
|
||||
if self.channel is None or not self.channel.get_busy():
|
||||
self.channel = self.sounds['item_bounce'].play(-1)
|
||||
|
||||
# Check if item has gone too far (20 tiles)
|
||||
if abs(self._currentX - self.xRange[0]) > 20:
|
||||
self.isActive = False
|
||||
if self.channel:
|
||||
self.channel.stop()
|
||||
self.channel = None
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def apply_effect(self, player):
|
||||
"""Apply the item's effect when collected"""
|
||||
if self.item_type == 'hand_of_glory':
|
||||
player.start_invincibility()
|
||||
speak("Hand of Glory makes you invincible!")
|
||||
elif self.item_type == 'jack_o_lantern':
|
||||
player.add_projectile('jack_o_lantern')
|
||||
speak("Gained a Jack-o'-lantern projectile!")
|
||||
|
||||
# Stop movement sound when collected
|
||||
if self.channel:
|
||||
self.channel.stop()
|
||||
self.channel = None
|
Reference in New Issue
Block a user