changeset 52:a18bf35519f3

Multiple layered backgrounds.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 03 Apr 2011 21:25:43 +0200
parents 8efb35009ba0
children 01cfef3a5acf
files data/levels/level1.json data/levels/level2.json data/levels/level3.json data/levels/level4.json skaapsteker/level.py
diffstat 5 files changed, 33 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/level1.json	Sun Apr 03 21:25:34 2011 +0200
+++ b/data/levels/level1.json	Sun Apr 03 21:25:43 2011 +0200
@@ -1,5 +1,8 @@
 {
-    "background": "dummy.png",
+    "backgrounds": [
+        "dummy.png",
+        "dummy-fg.png"
+    ],
     "tileset": "dummy",
     "tiles": [
         "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
--- a/data/levels/level2.json	Sun Apr 03 21:25:34 2011 +0200
+++ b/data/levels/level2.json	Sun Apr 03 21:25:43 2011 +0200
@@ -1,5 +1,8 @@
 {
-    "background": "dummy.png",
+    "backgrounds": [
+        "dummy.png",
+        "dummy-fg.png"
+    ],
     "tileset": "dummy",
     "tiles": [
         "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
@@ -27,4 +30,4 @@
     ],
     "enemies": [],
     "sprites": []
-}
\ No newline at end of file
+}
--- a/data/levels/level3.json	Sun Apr 03 21:25:34 2011 +0200
+++ b/data/levels/level3.json	Sun Apr 03 21:25:43 2011 +0200
@@ -1,5 +1,8 @@
 {
-    "background": "dummy.png",
+    "backgrounds": [
+        "dummy.png",
+        "dummy-fg.png"
+    ],
     "tileset": "dummy",
     "tiles": [
         "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
@@ -15,4 +18,4 @@
     ],
     "enemies": [],
     "sprites": []
-}
\ No newline at end of file
+}
--- a/data/levels/level4.json	Sun Apr 03 21:25:34 2011 +0200
+++ b/data/levels/level4.json	Sun Apr 03 21:25:43 2011 +0200
@@ -1,5 +1,8 @@
 {
-    "background": "dummy.png",
+    "backgrounds": [
+        "dummy.png",
+        "dummy-fg.png"
+    ],
     "tileset": "dummy",
     "tiles": [
         "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
@@ -18,4 +21,4 @@
     ],
     "enemies": [],
     "sprites": []
-}
\ No newline at end of file
+}
--- a/skaapsteker/level.py	Sun Apr 03 21:25:34 2011 +0200
+++ b/skaapsteker/level.py	Sun Apr 03 21:25:43 2011 +0200
@@ -34,15 +34,15 @@
     def __init__(self, leveldef):
         self.level_data = json.loads(data.load('levels/' + leveldef + '.json').read())
         self.sprites = Group()
-        self.build_background()
+        self.build_backgrounds()
         self.build_tiles()
         self.setup_enemies()
 
 
-    def build_background(self):
-        self.background = data.load_image('backgrounds/' + self.level_data['background'])
-        self.background_size = self.background.get_size()
-        print "background:", self.background_size
+    def build_backgrounds(self):
+        self.backgrounds = []
+        for background in self.level_data['backgrounds']:
+            self.backgrounds.append(data.load_image('backgrounds/' + background))
 
 
     def build_tiles(self):
@@ -79,20 +79,19 @@
         return Surface(self.pixel_size, flags=SRCALPHA)
 
 
-    def get_background_pos(self, pos, display_size):
-        bg_scalable_x = self.background_size[0] - display_size[0]
-        bg_scalable_y = self.background_size[1] - display_size[1]
-        lev_scalable_x = self.pixel_size[0] - display_size[0]
-        lev_scalable_y = self.pixel_size[1] - display_size[1]
-        scaled_x = (pos[0] * bg_scalable_x) / lev_scalable_x
-        scaled_y = (pos[1] * bg_scalable_y) / lev_scalable_y
-        return (scaled_x, scaled_y)
+    def get_background_pos(self, background, viewport):
+        vp_x, vp_y = viewport.size
+        bg_scalable = background.get_rect().inflate(-vp_x, -vp_y).size
+        lev_scalable = Rect((0, 0), self.pixel_size).inflate(-vp_x, -vp_y).size
+        return ((viewport.left * bg_scalable[0]) / lev_scalable[0],
+                (viewport.top * bg_scalable[1]) / lev_scalable[1])
 
 
     def draw_background(self, surface):
         clip_rect = surface.get_clip()
-        bg_pos = self.get_background_pos(clip_rect.topleft, clip_rect.size)
-        surface.blit(self.background, clip_rect.topleft, Rect(bg_pos, clip_rect.size))
+        for background in self.backgrounds:
+            bg_pos = self.get_background_pos(background, clip_rect)
+            surface.blit(background, clip_rect.topleft, Rect(bg_pos, clip_rect.size))
 
 
     def draw_tiles(self, surface):