Mercurial > dw
view lib/sprite.py @ 59:6b9f9dcfabf1 default tip
Monster cleanup
| author | Radomir Dopieralski <moindev@sheep.art.pl> |
|---|---|
| date | Wed, 02 Jan 2008 03:54:40 +0100 |
| parents | f0fa340b35d0 |
| children |
line wrap: on
line source
#!/usr/bin/python # -*- coding: utf-8 -*- import pygame from pygame.locals import * import os from util import * class Monster(pygame.sprite.Sprite): '''Display the animated representation of a creature''' def __init__(self, pos, level): pygame.sprite.Sprite.__init__(self) self.frame = 0 self.delay = 0 self.step = 0 self.level = level self.x, self.y = pos self.h = 0 self.dead = False self.anim = self.anim_stand() self.sprite = self self.place(pos) self.update() def place(self, pos): x, y = pos self.move(pos) self.z = y*16-12 self.rect = Rect(self.x*24, self.z, 24, 24) try: self.shadow.update() except AttributeError: pass def move(self, pos): x, y = pos self.x, self.y = pos def animate(self, frames, delay=0): if self.delay>=delay: self.delay = 0 self.frame += 1 if self.frame>=len(frames): self.frame = 0 else: self.delay += 1 self.image = frames[self.frame] def anim_die(self): self.step -= 1 if self.step==15: self.rect.move_ip(0, -4) self.h += 4 if self.step<=1: self.die() else: self.image.set_alpha(self.step*32) def anim_stand(self): self.animate(self.frames[0], 3) 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[0], 1) def anim_attack(self): if self.step<=2: dx = -delta_x[self.facing]*6 dy = -delta_y[self.facing]*4+1 self.h-=1 elif self.step<=4: dx = delta_x[self.facing]*6 dy = delta_y[self.facing]*4-1 self.h+=1 else: dx = 0 dy = 0 self.rect.move_ip(dx, dy) self.animate(self.frames[0], 0) def die(self): self.image = self.image.copy() self.anim = self.anim_die self.step = 8 def rotate(self, direction): self.facing = direction def update(self): if self.step<=0: self.anim = self.anim_stand self.anim() if self.step>0: self.step -= 1 def walk(self, direction): self.rotate(direction) self.move((self.x+delta_x[direction],self.y+delta_y[direction])) self.step = 8 self.anim = self.anim_walk def wait(self): self.rotate(3) self.step = 8 self.anim = self.anim_stand def attack(self, direction): self.rotate(direction) self.step = 4 self.anim = self.anim_attack
