X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Fbase.py;h=8bc803ae2ba0fbdc29db684f643be3a046300b17;hb=97b5c90d555fd2e24d99a4c37a08a56cccf92902;hp=26ee7819007dd06b132525175cb9fd2c84627193;hpb=8ed75cacf6664d0018859c9c84e99554c08ab801;p=koperkapel.git diff --git a/koperkapel/scenes/base.py b/koperkapel/scenes/base.py index 26ee781..8bc803a 100644 --- a/koperkapel/scenes/base.py +++ b/koperkapel/scenes/base.py @@ -165,7 +165,17 @@ class Actors: def draw(self, screen): for lvl, name in self._ordered_layers: for actor in self._layers[name]: - actor.draw() # TODO: allow an option screen to be passed in + # actor.draw doesn't allow blitting to anything other than + # the game scene + 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: @@ -174,6 +184,7 @@ class Scene: 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], @@ -190,7 +201,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()