added anims file

This commit is contained in:
cecilkorik 2017-05-18 21:28:11 -04:00
parent 44861c14aa
commit 0cfa8ee971

104
roc/anims.py Normal file
View 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)