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