changeset 278:8e27efd331aa

Offset support for scenes
author Neil Muller <neil@dip.sun.ac.za>
date Fri, 27 Aug 2010 22:04:25 +0200
parents 01b22664a12c
children c67a4a4d78f6
files gamelib/scenes/bridge.py gamelib/state.py
diffstat 2 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/scenes/bridge.py	Fri Aug 27 21:43:07 2010 +0200
+++ b/gamelib/scenes/bridge.py	Fri Aug 27 22:04:25 2010 +0200
@@ -18,6 +18,8 @@
     FOLDER = "bridge"
     BACKGROUND = 'bridge.png'
 
+    OFFSET = (0, -50)
+
     MUSIC = [
             'beep1.ogg',
             'beep2.ogg',
--- a/gamelib/state.py	Fri Aug 27 21:43:07 2010 +0200
+++ b/gamelib/state.py	Fri Aug 27 22:04:25 2010 +0200
@@ -222,6 +222,9 @@
     # name of scene (optional, defaults to folder)
     NAME = None
 
+    # Offset of the background image
+    OFFSET = (0, 0)
+
     # size (for detail views)
     SIZE = constants.SCENE_SIZE
 
@@ -269,7 +272,7 @@
 
     def draw_background(self, surface):
         if self._background is not None:
-            surface.blit(self._background, (0, 0), None)
+            surface.blit(self._background, self.OFFSET, None)
         else:
             surface.fill((200, 200, 200))
 
@@ -379,6 +382,14 @@
         self.rect = None
         # TODO: add masks
 
+    def _fix_rect(self):
+        """Fix rects to compensate for scene offset"""
+        if hasattr(self.rect, 'collidepoint'):
+            self.rect.move_ip(self.scene.OFFSET)
+        else:
+            for rect in list(self.rect):
+                rect.move_ip(self.scene.OFFSET)
+
     def set_scene(self, scene):
         assert self.scene is None
         self.scene = scene
@@ -392,6 +403,8 @@
     def set_interact(self, name):
         self.current_interact = self.interacts[name]
         self.rect = self.current_interact.interact_rect
+        if self.scene:
+            self._fix_rect()
         assert self.rect is not None, name
 
     def contains(self, pos):