diff skaapsteker/sprites/player.py @ 390:93f13f7d97f2

Initial fire rate-limiting
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 09 Apr 2011 16:18:08 +0200
parents 56f97d0c6a36
children d5381be5079f
line wrap: on
line diff
--- a/skaapsteker/sprites/player.py	Sat Apr 09 16:10:39 2011 +0200
+++ b/skaapsteker/sprites/player.py	Sat Apr 09 16:18:08 2011 +0200
@@ -6,7 +6,7 @@
 from ..sprites.base import find_sprite, Monster, TILE_SIZE, PC_LAYER, MONSTER_LAYER, PROJECTILE_LAYER
 from ..sprites.projectiles import Fireball, Lightning
 from ..physics import Sprite
-from ..constants import Layers, FoxHud, DOUBLE_TAP_TIME
+from ..constants import Layers, FoxHud, DOUBLE_TAP_TIME, RECHARGE_TIME
 from ..data import get_files, load_image
 from ..engine import PlayerDied, AddSpriteEvent
 
@@ -29,6 +29,7 @@
         self._soundsystem.load_sound('yelp', 'sounds/yelp.ogg')
         self._animation_frame = 0.0
         self._last_time = time.time()
+        self._last_fired = time.time()
         # State flags and such
         self.attacking = 0
         self.running = False
@@ -299,17 +300,30 @@
         self._launch_projectile(Lightning)
 
     def action_fire1(self):
+        if not self.check_fire_rate():
+            return
         if "fireball" not in self._me.tails:
             self._bite_attack()
         else:
             self._fireball_attack()
 
     def action_fire2(self):
+        if not self.check_fire_rate():
+            return
         if "lightning" not in self._me.tails:
             self._bite_attack()
         else:
             self._lightning_attack()
 
+    def check_fire_rate(self):
+        if self.recharge_level() < 1:
+            return False
+        self._last_fired = time.time()
+        return True
+
+    def recharge_level(self):
+        return min((time.time() - self._last_fired) / RECHARGE_TIME, 1)
+
     def _get_action(self):
         if self.attacking:
             return 'attacking'