It's always the small, simple changes that cause the most problems. Invulnerability system hopefully working for real this time.
This commit is contained in:
45
src/enemy.py
45
src/enemy.py
@@ -49,10 +49,12 @@ class Enemy(Object):
|
||||
# Initialize vulnerability system
|
||||
self.hasVulnerabilitySystem = kwargs.get('has_vulnerability', False)
|
||||
if self.hasVulnerabilitySystem:
|
||||
self.isVulnerable = kwargs.get('is_vulnerable', False) # For enemies with vulnerability, default to invulnerable
|
||||
self.isVulnerable = False # Start invulnerable
|
||||
self.vulnerabilityTimer = pygame.time.get_ticks()
|
||||
self.vulnerabilityDuration = kwargs.get('vulnerability_duration', 1000)
|
||||
self.vulnerabilityDuration = kwargs.get('vulnerability_duration', 2000)
|
||||
self.invulnerabilityDuration = kwargs.get('invulnerability_duration', 5000)
|
||||
soundName = f"{self.enemyType}_is_vulnerable" if self.isVulnerable else self.enemyType
|
||||
self.channel = obj_play(self.sounds, soundName, self.level.player.xPos, self.xPos)
|
||||
else:
|
||||
self.isVulnerable = True
|
||||
|
||||
@@ -67,6 +69,7 @@ class Enemy(Object):
|
||||
self.movementSpeed *= speedMultiplier # Spiders are faster
|
||||
self.attackPattern = {'type': 'hunter'} # Spiders actively hunt the player
|
||||
self.turnThreshold = 3 # Spiders turn around quickly to chase player
|
||||
|
||||
|
||||
@property
|
||||
def xPos(self):
|
||||
@@ -94,30 +97,25 @@ class Enemy(Object):
|
||||
"""Update enemy position and handle attacks"""
|
||||
if not self.isActive or self.health <= 0:
|
||||
return
|
||||
|
||||
# Set initial sound for enemies with vulnerability system
|
||||
if self.hasVulnerabilitySystem and self.channel is None:
|
||||
soundName = f"{self.enemyType}_is_vulnerable" if self.isVulnerable else self.enemyType
|
||||
self.channel = obj_play(self.sounds, soundName, player.xPos, self.xPos)
|
||||
|
||||
# Enemy vulnerability state management
|
||||
|
||||
# Initialize sound for enemies with vulnerability system immediately upon creation
|
||||
if self.hasVulnerabilitySystem:
|
||||
if self.isVulnerable and (currentTime - self.vulnerabilityTimer > self.vulnerabilityDuration):
|
||||
# Switch to invulnerable
|
||||
self.isVulnerable = False
|
||||
if self.channel is None:
|
||||
soundName = f"{self.enemyType}_is_vulnerable" if self.isVulnerable else self.enemyType
|
||||
self.channel = obj_play(self.sounds, soundName, player.xPos, self.xPos)
|
||||
# Update existing channel position
|
||||
else:
|
||||
self.channel = obj_update(self.channel, player.xPos, self.xPos)
|
||||
|
||||
# Check for vulnerability state change
|
||||
if currentTime - self.vulnerabilityTimer >= (self.vulnerabilityDuration if self.isVulnerable else self.invulnerabilityDuration):
|
||||
self.isVulnerable = not self.isVulnerable
|
||||
self.vulnerabilityTimer = currentTime
|
||||
# Change sound back to base enemy sound
|
||||
|
||||
if self.channel:
|
||||
obj_stop(self.channel)
|
||||
self.channel = obj_play(self.sounds, self.enemyType, player.xPos, self.xPos)
|
||||
elif not self.isVulnerable and (currentTime - self.vulnerabilityTimer > self.invulnerabilityDuration):
|
||||
# Switch to vulnerable
|
||||
self.isVulnerable = True
|
||||
self.vulnerabilityTimer = currentTime
|
||||
# Change to vulnerable sound
|
||||
if self.channel:
|
||||
obj_stop(self.channel)
|
||||
self.channel = obj_play(self.sounds, f"{self.enemyType}_is_vulnerable", player.xPos, self.xPos)
|
||||
soundName = f"{self.enemyType}_is_vulnerable" if self.isVulnerable else self.enemyType
|
||||
self.channel = obj_play(self.sounds, soundName, player.xPos, self.xPos)
|
||||
|
||||
# Check if player has entered territory
|
||||
if not self.hunting:
|
||||
@@ -226,8 +224,7 @@ class Enemy(Object):
|
||||
|
||||
def take_damage(self, amount):
|
||||
"""Handle enemy taking damage"""
|
||||
# Enemy can only take damage when vulnerable
|
||||
if not self.isVulnerable:
|
||||
if self.hasVulnerabilitySystem and not self.isVulnerable:
|
||||
return
|
||||
|
||||
self.health -= amount
|
||||
|
Reference in New Issue
Block a user