X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Fbase.py;h=24a8c615fa06c43f97fe893f302d5aab3197f26b;hb=354b606a62a1d3a9e41b77f499d35a4c10aa1f3a;hp=2a094f62b1b2dbbea04f77fc149a5412c24bfe81;hpb=f8c995a818de63aac42ec1374084707537964c40;p=koperkapel.git diff --git a/koperkapel/scenes/base.py b/koperkapel/scenes/base.py index 2a094f6..24a8c61 100644 --- a/koperkapel/scenes/base.py +++ b/koperkapel/scenes/base.py @@ -20,6 +20,7 @@ class Engine: self._app = app self._scene = scene self._world = world + self._update_vehicle = False def _apply_events(self, events): if not events: @@ -28,8 +29,10 @@ class Engine: ev.apply(self) def change_scene(self, scene): + print('here', self._scene) self._apply_events(self._scene.exit(self._world.proxy())) self._scene = scene + print('there', self._scene) self._apply_events(self._scene.enter(self._world.proxy())) def change_world(self, *args, **kw): @@ -170,12 +173,21 @@ class Actors: screen.blit(actor._surf, actor.topleft) +def defer_to_update(f): + """ Defers a function until the next update run. """ + @functools.wraps(f) + def wrapper(self, *args, **kw): + self._deferred_updates.append((f, args, kw)) + return wrapper + + class Scene: """ Base class for scenes. """ def __init__(self): self.actors = Actors() self.viewport = (0, 0) + self._deferred_updates = [] def move_screen(self, offset): self.viewport = (self.viewport[0] + offset[0], @@ -192,7 +204,9 @@ class Scene: pass def update(self, world, engine, dt): - pass + deferred_updates, self._deferred_updates = self._deferred_updates, [] + for f, args, kw in deferred_updates: + f(self, world, *args, **kw) def draw(self, screen): screen.clear()