From 0cfa8ee971e145b1f2ffca6bf022476c8829f425 Mon Sep 17 00:00:00 2001 From: cecilkorik Date: Thu, 18 May 2017 21:28:11 -0400 Subject: [PATCH] added anims file --- roc/anims.py | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 roc/anims.py diff --git a/roc/anims.py b/roc/anims.py new file mode 100644 index 0000000..ac4accb --- /dev/null +++ b/roc/anims.py @@ -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)