changeset 23:64d63ec6ecaf

Refactoring of animations
author Radomir Dopieralski <moindev@sheep.art.pl>
date Mon, 17 Dec 2007 19:18:43 +0100
parents 7b79f91b6c40
children ee5c35fa6e55
files monster/__init__.py monster/jello.py monster/player.py
diffstat 3 files changed, 44 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/monster/__init__.py	Mon Dec 17 18:23:14 2007 +0100
+++ b/monster/__init__.py	Mon Dec 17 19:18:43 2007 +0100
@@ -37,7 +37,6 @@
         self.h = 0
         self.place(pos)
         self.frames = read_frames(os.path.join("image", image_file))
-        self.anim = self.frames[0]
         self.shadow = Shadow(self)
         self.level.add_sprite(self.level.creatures, self)
         self.shadow.update()
@@ -66,17 +65,19 @@
         self.x, self.y = pos
         self.level.monsters[pos] = self
         
-    def animate(self, delay=0):
-        '''Change the frame of animation'''
-        
+    def animate(self, frames, delay=0):
         if self.delay>=delay:
             self.delay = 0
             self.frame += 1
-            if self.frame>=len(self.anim):
+            if self.frame>=len(frames):
                 self.frame = 0
         else:
             self.delay += 1
-            self.image = self.anim[self.frame]
+            self.image = frames[self.frame]
+
+    
+    def anim(self):
+        self.animate(self.frames[0], 2)
 
     def die(self):
         try:
@@ -84,6 +85,10 @@
         except AttributeError:
             pass
         self.kill()
+        try:
+            del self.level.monsters[(self.x, self.y)]
+        except KeyError:
+            pass
 
     def update(self):
-        self.animate(3)
+        self.anim()
--- a/monster/jello.py	Mon Dec 17 18:23:14 2007 +0100
+++ b/monster/jello.py	Mon Dec 17 19:18:43 2007 +0100
@@ -6,6 +6,3 @@
 class Mob(Monster):
     def __init__(self, pos, level):
         Monster.__init__(self, pos, level, "jello.png")
-        
-    def update(self):
-        self.animate(3)
--- a/monster/player.py	Mon Dec 17 18:23:14 2007 +0100
+++ b/monster/player.py	Mon Dec 17 19:18:43 2007 +0100
@@ -12,40 +12,49 @@
         Monster.__init__(self, pos, level, "abi2.png")
         self.rotate(3)
         self.level.player = self
+        self.anim = self.anim_stand
+    
+    def anim_stand(self):
+        self.image = self.frames[self.facing-1][0]
+        
+    def anim_walk(self):
+        self.rect.move_ip(delta_x[self.facing]*3, delta_y[self.facing]*2)
+        self.z += delta_y[self.facing]*2
+        self.animate(self.frames[self.facing-1], 1)
+        self.step -= 1        
+        if self.step<=0:
+            self.anim = self.anim_stand
 
-      
+    def anim_attack(self):
+        dx = delta_x[self.facing]*6
+        dy = delta_y[self.facing]*4-1
+        if self.step<=2:
+            dx = -dx
+            dy = -dy
+            self.h-=1
+        else:
+            self.h+=1
+        self.rect.move_ip(dx, dy)
+        self.animate(self.frames[self.facing-1], 1)
+        self.step -= 1
+        if self.step<=0:
+            self.anim = self.anim_stand
+
+    
     def update(self):
-        if self.step>0:
-            self.rect.move_ip(delta_x[self.facing]*3, delta_y[self.facing]*2)
-            self.z += delta_y[self.facing]*2
-            self.step -= 1
-        elif self.step<0:
-            dx = delta_x[self.facing]*6
-            dy = delta_y[self.facing]*4-1
-            if self.step>=-2:
-                dx = -dx
-                dy = -dy
-                self.h-=1
-            else:
-                self.h+=1
-            self.rect.move_ip(dx, dy)
-            self.step += 1
-        else:
-            self.h = 0
-            self.frame = 0
-        self.animate(1)
+        self.anim()
 
     def rotate(self, facing):
         self.facing = facing
-        self.anim = self.frames[facing-1]
 
     def walk(self, direction):
         self.move((self.x+delta_x[direction],self.y+delta_y[direction]))
         self.rotate(direction)
         self.step = 8
+        self.anim = self.anim_walk
     
     def attack(self, direction, monster):
         self.rotate(direction)
-        self.step = -4
+        self.step = 4
+        self.anim = self.anim_attack
         Mesg(monster, "miss", color=(255,255,0))
-