Actors will perform where asked.
[koperkapel.git] / koperkapel / scenes / base.py
index ade4d8bfddede638919ab9eb884423d38a9e55c6..2a094f62b1b2dbbea04f77fc149a5412c24bfe81 100644 (file)
@@ -20,7 +20,6 @@ class Engine:
         self._app = app
         self._scene = scene
         self._world = world
-        self._viewport = (0, 0)
 
     def _apply_events(self, events):
         if not events:
@@ -41,19 +40,14 @@ class Engine:
         exit()
 
     def move_screen(self, offset):
-        self._viewport = (self._viewport[0] + offset[0],
-                          self._viewport[1] + offset[1])
-
-    def calc_offset(self, x, y):
-        """Return a position offset by the viewport"""
-        return x - self._viewport[0], y - self._viewport[1]
+        self._scene.move_screen(offset)
 
     @apply_events
     def update(self, dt):
         return self._scene.update(self._world.proxy(), self, dt)
 
     def draw(self):
-        self._scene.draw(self._app.screen, self._viewport)
+        self._scene.draw(self._app.screen)
 
     @apply_events
     def on_mouse_down(self, pos, button):
@@ -171,7 +165,9 @@ 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)
 
 
 class Scene:
@@ -179,6 +175,15 @@ class Scene:
 
     def __init__(self):
         self.actors = Actors()
+        self.viewport = (0, 0)
+
+    def move_screen(self, offset):
+        self.viewport = (self.viewport[0] + offset[0],
+                         self.viewport[1] + offset[1])
+
+    def calc_offset(self, x, y):
+        """ Return a position offset by the viewport. """
+        return x - self.viewport[0], y - self.viewport[1]
 
     def enter(self, world):
         pass
@@ -189,7 +194,7 @@ class Scene:
     def update(self, world, engine, dt):
         pass
 
-    def draw(self, screen, viewport):
+    def draw(self, screen):
         screen.clear()
         self.actors.draw(screen)