Mercurial > skaapsteker
changeset 381:56f97d0c6a36
Add flying (max flight time is number of tails in seconds). Set max sprint time to number of tails over 4.0 is seconds.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 09 Apr 2011 15:55:18 +0200 |
parents | a0afc7c1a4dc |
children | 3a524c10a95c |
files | skaapsteker/sprites/player.py |
diffstat | 1 files changed, 28 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/skaapsteker/sprites/player.py Sat Apr 09 15:39:45 2011 +0200 +++ b/skaapsteker/sprites/player.py Sat Apr 09 15:55:18 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 +from ..constants import Layers, FoxHud, DOUBLE_TAP_TIME from ..data import get_files, load_image from ..engine import PlayerDied, AddSpriteEvent @@ -19,7 +19,6 @@ block = True - _max_sprint_time = 2 def __init__(self, the_world, soundsystem): Sprite.__init__(self) @@ -103,9 +102,14 @@ # Force animation frame jump self._animation_frame = old_frame + 1 self._last_time = time.time() + now = time.time() if self.sprinting > 0: - if (time.time() - self._sprint_start_time) > self._max_sprint_time: + if (now - self._sprint_start_time) > self._max_sprint_time: self.sprinting = 0 + if self.flying > 0: + if (now - self._flight_start_time) > self._max_flight_time: + self.flying = 0 + # v_y = 0 # Standard platformer flying if abs(v_x) < 80: # Clamp when we're not moving at least 5 pixel / s self.velocity = (0, v_y) @@ -172,8 +176,6 @@ self._collisions_seen += 1 if hasattr(other, 'collided_player'): other.collided_player(self) - print 'Health', self._me.cur_health - def damage(self, damage): self._me.cur_health -= damage @@ -203,19 +205,25 @@ def action_double_left(self): # FIXME: Tie this to the tails - if self.sprinting > 0: + if self.sprinting > 0 or self.flying > 0: return self.sprinting = 2 self._sprint_start_time = time.time() def action_double_right(self): - if self.sprinting > 0: + if self.sprinting > 0 or self.flying > 0: return - self.sprinting = 2 + self.sprinting = 2 + self._max_sprint_time = float(len(self._me.tails)) / 4.0 self._sprint_start_time = time.time() def action_double_up(self): - pass + if self.flying > 0 or 'flight' not in self._me.tails or \ + self.prep_flight - time.time() > 2.5 * DOUBLE_TAP_TIME: + return + self.flying = 1 + self._max_flight_time = float(len(self._me.tails)) + self._flight_start_time = time.time() def action_transform(self): """Transform the fox""" @@ -251,21 +259,24 @@ else: self.deltav((450.0, 0.0)) - def action_up(self): - if self.on_solid and self.shape == 'fox': + if self.flying: + self.deltav((0.0, -self.terminal_velocity[1] / 5.0)) + elif self.on_solid and self.shape == 'fox': + self.prep_flight = time.time() self.deltav((0.0, -self.terminal_velocity[1])) self.on_solid = False def action_down(self): - print self._touching_actionables - if self._touching_actionables: + if self.flying: + return + #self.deltav((0.0, self.terminal_velocity[1] / 2.0)) + elif self._touching_actionables: self._touching_actionables[0].player_action(self) elif self._me.item is not None and self.on_solid: self.drop_item() def _bite_attack(self): - print 'ninja bite attack' self.attacking = 2 self._last_time = time.time() # Reset the animation clock @@ -278,13 +289,11 @@ AddSpriteEvent.post(projectile) def _fireball_attack(self): - print 'ninja fireball attack attack attack' self.attacking = 2 self._last_time = time.time() # Reset the animation clock self._launch_projectile(Fireball) def _lightning_attack(self): - print 'thunderbolts and lightning' self.attacking = 2 self._last_time = time.time() # Reset the animation clock self._launch_projectile(Lightning) @@ -308,8 +317,10 @@ return 'sprinting' if self.running: return 'running' + if self.flying: + return 'running' if self.jumping: - return 'jumpin' + return 'jumping' return 'standing' def _make_key(self, tails, action=None): @@ -407,7 +418,6 @@ self.take_item_by_name(item.name) # We create a scaled version of the image for the inventory display item.remove() - print "took", item def make_inventory_image(self):