added anims file
This commit is contained in:
parent
44861c14aa
commit
0cfa8ee971
1 changed files with 104 additions and 0 deletions
104
roc/anims.py
Normal file
104
roc/anims.py
Normal file
|
@ -0,0 +1,104 @@
|
|||
import os
|
||||
import files
|
||||
import gametimer
|
||||
import video
|
||||
|
||||
class anim(object):
|
||||
def __init__(self, frameset):
|
||||
self.frame = 0
|
||||
self.frameset = frameset
|
||||
self.frame_timer = self.frameset.frame_delays[0]
|
||||
self.dirty = True
|
||||
self.repeats = None
|
||||
self.done = False
|
||||
|
||||
def update(self):
|
||||
self.frame_timer -= gametimer.elapsed()
|
||||
while self.frame_timer <= 0:
|
||||
self.dirty = True
|
||||
self.frame += 1
|
||||
if self.frame >= len(self.frameset.frames):
|
||||
if self.repeats == None:
|
||||
"repeats == None means repeat forever"
|
||||
pass
|
||||
elif self.repeats == 0:
|
||||
"no more repeats, stop playing animation and leave it on the last frame"
|
||||
self.frame = len(self.frameset.frames) - 1
|
||||
self.done = True
|
||||
break
|
||||
else:
|
||||
self.repeats -= 1
|
||||
self.frame = 0
|
||||
self.frame_timer += self.frameset.frame_delays[self.frame]
|
||||
|
||||
return self.dirty
|
||||
|
||||
def draw(self, scr, pos):
|
||||
self.frameset.draw(scr, pos, self.frame)
|
||||
self.dirty = False
|
||||
|
||||
def size(self):
|
||||
return self.frameset.size()
|
||||
|
||||
|
||||
|
||||
class anim_frameset(object):
|
||||
def __init__(self, first_img, delay):
|
||||
self.frames = []
|
||||
self.load_frames(first_img)
|
||||
self.cached_surface = None
|
||||
|
||||
self.frame_delays = []
|
||||
self.set_delay(delay)
|
||||
|
||||
def load_frames(self, ifn):
|
||||
ifn, ife = os.path.splitext(ifn)
|
||||
if ifn and ifn[-1] == '1':
|
||||
self.frames = []
|
||||
|
||||
ifn = ifn[:-1]
|
||||
padlen = 0
|
||||
while ifn[-1] == '0':
|
||||
ifn = ifn[:-1]
|
||||
padlen += 1
|
||||
|
||||
i = 1
|
||||
def padnum(n, l):
|
||||
return (("0" * max(0,l-len(str(n))+1)) + str(n))
|
||||
while True:
|
||||
iff = ifn + padnum(i, padlen) + ife
|
||||
if files.mgr.exists(iff):
|
||||
#LOAD
|
||||
self.frames += [files.mgr.png(iff)]
|
||||
else:
|
||||
break
|
||||
i += 1
|
||||
else:
|
||||
#LOAD
|
||||
self.frames = [files.mgr.png(ifn + ife)]
|
||||
|
||||
if not self.frames:
|
||||
raise OSError('File "%s" does not exist' % (ifn + ife))
|
||||
|
||||
|
||||
def set_delay(self, delay):
|
||||
try:
|
||||
iter(delay)
|
||||
except TypeError:
|
||||
delay = [int(delay)] * len(self.frames)
|
||||
self.frame_delays = [int(x) for x in delay]
|
||||
|
||||
|
||||
def size(self):
|
||||
r = self.frames[0].get_rect()
|
||||
return (r.w, r.h)
|
||||
|
||||
|
||||
def draw(self, scr, pos, frame):
|
||||
if scr != self.cached_surface:
|
||||
for f in self.frames:
|
||||
f.convert_alpha(scr)
|
||||
self.cached_surface = scr
|
||||
|
||||
img = self.frames[frame]
|
||||
scr.blit(img, pos)
|
Loading…
Add table
Reference in a new issue