Mercurial > skaapsteker
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'