Mercurial > skaapsteker
changeset 441:f3ccb00df6a4
Add life stealing.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 09 Apr 2011 19:41:20 +0200 |
parents | ae0c67788f96 |
children | a084af91d5dc |
files | skaapsteker/sprites/base.py skaapsteker/sprites/player.py |
diffstat | 2 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/skaapsteker/sprites/base.py Sat Apr 09 19:30:52 2011 +0200 +++ b/skaapsteker/sprites/base.py Sat Apr 09 19:41:20 2011 +0200 @@ -180,7 +180,7 @@ pos = pygame.Rect(self.rect.midleft, (0, 0)) else: pos = pygame.Rect(self.rect.midright, (0, 0)) - projectile = cls(pos, direction=self.facing, hits=Player) + projectile = cls(pos, direction=self.facing, hits=Player, source=self) AddSpriteEvent.post(projectile) def do_attack(self): @@ -293,9 +293,10 @@ PROJECTILE_SIZE = (0, 0) # pixels VELOCITY = (10, 10) # pixels/s - def setup(self, direction, hits, **opts): + def setup(self, direction, hits, source, **opts): super(Projectile, self).setup(**opts) self.facing = direction + self.source = source # source of the projectile (may be None) self._update_image(True) # ensure we get the direction right if isinstance(hits, tuple): @@ -322,6 +323,8 @@ return if hasattr(other, 'damage'): other.damage(self.DAMAGE) + if hasattr(self.source, 'steal_life'): + self.source.steal_life(self.DAMAGE) self.explode()
--- a/skaapsteker/sprites/player.py Sat Apr 09 19:30:52 2011 +0200 +++ b/skaapsteker/sprites/player.py Sat Apr 09 19:41:20 2011 +0200 @@ -241,6 +241,11 @@ if self._me.cur_health <= 0: PlayerDied.post() + def steal_life(self, damage_done): + if 'steal' in self._me.tails: + self._me.cur_health += damage_done * len(self._me.tails) / 32 + self._me.cur_health = min(self._me.cur_health, self._me.max_health) + def restore(self): """Restore player to max health (for restarting levels, etc.)""" self._me.cur_health = self._me.max_health @@ -354,7 +359,7 @@ pos = pygame.Rect(self.rect.midleft, (0, 0)) else: pos = pygame.Rect(self.rect.midright, (0, 0)) - projectile = cls(pos, direction=self.facing, hits=Monster) + projectile = cls(pos, direction=self.facing, hits=Monster, source=self) AddSpriteEvent.post(projectile) def _fireball_attack(self):