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):