More content added, weapons, coin collecting, basic combat.
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
from libstormgames import *
|
||||
|
||||
class Object:
|
||||
def __init__(self, xPos, yPos, soundName, isStatic=True, isCollectible=False, isHazard=False):
|
||||
self.xPos = xPos
|
||||
def __init__(self, x, yPos, soundName, isStatic=True, isCollectible=False, isHazard=False):
|
||||
# x can be either a single position or a range [start, end]
|
||||
self.xRange = [x, x] if isinstance(x, (int, float)) else x
|
||||
self.yPos = yPos
|
||||
self.soundName = soundName
|
||||
self.isStatic = isStatic
|
||||
@@ -8,3 +11,25 @@ class Object:
|
||||
self.isHazard = isHazard
|
||||
self.channel = None # For tracking the sound channel
|
||||
self.isActive = True
|
||||
# For collectibles in a range, track which positions have been collected
|
||||
self.collectedPositions = set()
|
||||
|
||||
@property
|
||||
def xPos(self):
|
||||
"""Return center of range for audio positioning"""
|
||||
return (self.xRange[0] + self.xRange[1]) / 2
|
||||
|
||||
def is_in_range(self, x):
|
||||
"""Check if a given x position is within this object's range"""
|
||||
tolerance = 0.5 # Half a unit tolerance
|
||||
return (self.xRange[0] - tolerance) <= x <= (self.xRange[1] + tolerance)
|
||||
|
||||
def collect_at_position(self, x):
|
||||
"""Mark a specific position in the range as collected"""
|
||||
self.collectedPositions.add(x)
|
||||
# If all positions in range are collected, deactivate the object and stop sound
|
||||
if len(self.collectedPositions) == int(self.xRange[1] - self.xRange[0] + 1):
|
||||
self.isActive = False
|
||||
if self.channel:
|
||||
obj_stop(self.channel)
|
||||
self.channel = None
|
||||
|
Reference in New Issue
Block a user