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