Mercurial > dw
changeset 57:f0fa340b35d0
sprite.py
| author | Radomir Dopieralski <moindev@sheep.art.pl> |
|---|---|
| date | Wed, 02 Jan 2008 03:23:06 +0100 |
| parents | 32cfc82acef6 |
| children | 45deecf194a9 |
| files | lib/sprite.py |
| diffstat | 1 files changed, 114 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/sprite.py Wed Jan 02 03:23:06 2008 +0100 @@ -0,0 +1,114 @@ +#!/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 +
