changeset 435:b6fdaf8e453c

Make shield last for one second. Separate out recharge times to allow the shield to take longer to recharge.
author Simon Cross <hodgestar@gmail.com>
date Sat, 09 Apr 2011 19:15:37 +0200
parents 827c5d045cf5
children 32df272a163a
files skaapsteker/sprites/player.py
diffstat 1 files changed, 15 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/sprites/player.py	Sat Apr 09 19:14:19 2011 +0200
+++ b/skaapsteker/sprites/player.py	Sat Apr 09 19:15:37 2011 +0200
@@ -31,9 +31,9 @@
         self._animation_frame = 0.0
         self._last_time = time.time()
         self._recharge_timers = {
-                'fireball': time.time(),
-                'lightning': time.time(),
-                'shield': time.time(),
+            'fireball': [ time.time(), lambda : 2.0 / len(self._me.tails) ],
+            'lightning': [ time.time(), lambda : 2.0 / len(self._me.tails) ],
+            'shield': [ time.time(), lambda : 16.0 / len(self._me.tails) ],
         }
         self._inv_cache = {} # invisible fox image cache
         self._shield_cache = {} # shielded fox image cache
@@ -159,7 +159,8 @@
             if (now - self._invisibility_start_time) > self._max_invisibility_time:
                 self.invisible = 0
         if self.using_shield > 0:
-            self.using_shield -= 1
+            if (now - self._shield_start_time) > 1.0:
+                self.using_shield = 0
         if abs(v_x) < 80:
             # Clamp when we're not moving at least 5 pixel / s
             self.velocity = (0, v_y)
@@ -227,9 +228,13 @@
             other.collided_player(self)
 
     def damage(self, damage):
-        if 'shield' in self._me.tails and self.check_fire_rate('shield'):
-            print "Using shield"
-            self.using_shield = 30
+        if self.using_shield > 0:
+            "Shield on."
+            return
+        elif 'shield' in self._me.tails and self.check_fire_rate('shield'):
+            print "Activating shield."
+            self._shield_start_time = time.time()
+            self.using_shield = 1
             return
         self._me.cur_health -= damage
         self._soundsystem.play_sound('yelp')
@@ -385,12 +390,12 @@
     def check_fire_rate(self, attack):
         if self.recharge_level(attack) < 1:
             return False
-        self._recharge_timers[attack] = time.time()
+        self._recharge_timers[attack][0] = time.time()
         return True
 
     def recharge_level(self, attack):
-        recharge_time = 2.0 / len(self._me.tails)
-        return min((time.time() - self._recharge_timers[attack]) / recharge_time, 1)
+        recharge_time = self._recharge_timers[attack][1]()
+        return min((time.time() - self._recharge_timers[attack][0]) / recharge_time, 1)
 
     def discharge_level(self, tail):
         if tail == 'invisibility' and hasattr(self, '_invisibility_start_time'):