From 6280ea432758f7c9487bb48d599c86b99528c92d Mon Sep 17 00:00:00 2001 From: Gabriel Eirea Date: Sat, 10 Mar 2012 00:00:30 +0000 Subject: Added layers and simplified event calling --- diff --git a/TODO b/TODO index fb27655..4b47f08 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,3 @@ -- add check for existence of event -- generalized event calling -- layers - add events - add objects - editor? diff --git a/rayito/RtoObject.py b/rayito/RtoObject.py index 5963f4c..1c731f3 100755 --- a/rayito/RtoObject.py +++ b/rayito/RtoObject.py @@ -52,6 +52,9 @@ class RtoObject(): def change_layer(self, new_layer): self._layer = new_layer + def get_layer(self): + return self._layer + def move_start(self, vel): # vel should be in pixels per millisecond self._moving = True @@ -83,6 +86,8 @@ class RtoImage(RtoObject): """ Class for rayito images. image: pygame surface with the image + position: (x, y) of upper-left corner in pixels + layer: layer number, high is up, low is down """ def __init__(self, image, position, layer = 0): @@ -142,10 +147,13 @@ class RtoImage(RtoObject): class RtoDialog(RtoObject): """Class for rayito dialogs - text: list with text to display; each element can have \n to separate lines + text: list with text to display; + each element can have \n to separate lines font: pygame font to use bg_color: background color (R, G, B) fg_color: text color (R, G, B) + position: (x, y) of upper-left corner in pixels + layer: layer number, high is up, low is down """ def __init__(self, text, font, bg_color, fg_color, position, layer = 0): @@ -209,6 +217,8 @@ class RtoButton(RtoObject): font: pygame font to use bg_color: background color (R, G, B) fg_color: text color (R, G, B) + position: (x, y) of upper-left corner in pixels + layer: layer number, high is up, low is down """ def __init__(self, text, font, bg_color, fg_color, position, layer = 0): @@ -262,6 +272,8 @@ class RtoSprite(RtoObject): next_frames: list with next frame from current one dxs: list with dx for current frame (in pixels) dys: list with dy for current frame (in pixels) + position: (x, y) of upper-left corner in pixels + layer: layer number, high is up, low is down """ def __init__(self, images, frames, next_frames, dxs, dys, diff --git a/rayito/RtoPlayer.py b/rayito/RtoPlayer.py index d9f5e6e..4e8f5c9 100755 --- a/rayito/RtoPlayer.py +++ b/rayito/RtoPlayer.py @@ -46,7 +46,7 @@ class RtoPlayer(): self._finished = False self._canvas = pygame.Surface(size) self._last_update = 0 - self._active_objects = set() + self._active_objects = list() self._tl_index = 0 self._tl_length = self._timeline.get_length() self._loop = loop @@ -81,50 +81,25 @@ class RtoPlayer(): if self._paused or self._finished: return # read events between last_update and time - # TODO: must be generalized while self._timeline.get_time(self._tl_index) <= \ time - self._loop_time - self._pause_time: - if self._timeline.get_event(self._tl_index) == 'show': - self._active_objects.add(self._timeline.get_object(self._tl_index)) - self._timeline.get_object(self._tl_index).show() - elif self._timeline.get_event(self._tl_index) == 'hide': - self._active_objects.remove(self._timeline.get_object(self._tl_index)) - self._timeline.get_object(self._tl_index).hide() - elif self._timeline.get_event(self._tl_index) == 'move_by': - self._timeline.get_object(self._tl_index).move_by( - self._timeline.get_params(self._tl_index)) - elif self._timeline.get_event(self._tl_index) == 'move_to': - self._timeline.get_object(self._tl_index).move_to( - self._timeline.get_params(self._tl_index)) - elif self._timeline.get_event(self._tl_index) == 'scale_by': - self._timeline.get_object(self._tl_index).scale_by( - self._timeline.get_params(self._tl_index)) - elif self._timeline.get_event(self._tl_index) == 'scale_to': - self._timeline.get_object(self._tl_index).scale_to( - self._timeline.get_params(self._tl_index)) - elif self._timeline.get_event(self._tl_index) == 'flip_hor': - self._timeline.get_object(self._tl_index).flip_hor() - elif self._timeline.get_event(self._tl_index) == 'flip_ver': - self._timeline.get_object(self._tl_index).flip_ver() - elif self._timeline.get_event(self._tl_index) == 'rotate': - self._timeline.get_object(self._tl_index).rotate( - self._timeline.get_params(self._tl_index)) - elif self._timeline.get_event(self._tl_index) == 'move_start': - self._timeline.get_object(self._tl_index).move_start( - self._timeline.get_params(self._tl_index)) - elif self._timeline.get_event(self._tl_index) == 'move_stop': - self._timeline.get_object(self._tl_index).move_stop() - elif self._timeline.get_event(self._tl_index) == 'next_text': - self._timeline.get_object(self._tl_index).next_text() - elif self._timeline.get_event(self._tl_index) == 'restart': - self._timeline.get_object(self._tl_index).restart() - elif self._timeline.get_event(self._tl_index) == 'update_frame': - self._timeline.get_object(self._tl_index).update_frame( - self._timeline.get_params(self._tl_index)) - elif self._timeline.get_event(self._tl_index) == 'pause': + ev = self._timeline.get_event(self._tl_index) + ob = self._timeline.get_object(self._tl_index) + pa = self._timeline.get_params(self._tl_index) + try: + if pa == None: + getattr(ob,ev)() + else: + getattr(ob,ev)(pa) + except: + print("Event " + ev + " not defined in object " + str(ob)) + if ev == 'show': + self._active_objects.append(ob) + self._active_objects.sort(key=lambda ob:ob.get_layer()) + elif ev == 'hide': + self._active_objects.remove(ob) + elif ev == 'pause': self.pause() - elif self._timeline.get_event(self._tl_index) == 'play': - self._timeline.get_object(self._tl_index).play() # update index and check boundary self._tl_index += 1 if self._tl_index == self._tl_length: @@ -147,7 +122,6 @@ class RtoPlayer(): self._canvas.blit(self._bg_image, (0,0)) else: self._canvas.fill(self._bg_color) - # TODO: order active objects by layer # render active objects on canvas for obj in self._active_objects: obj.render(self._canvas) -- cgit v0.9.1