changeset 13:b83f2db218e6

Draw level background with scaled offset.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 03 Apr 2011 16:33:27 +0200
parents ded67a5c80c1
children fb1bd081cc86
files data/levels/level1.json skaapsteker/__main__.py skaapsteker/level.py
diffstat 3 files changed, 100 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/level1.json	Sun Apr 03 16:01:30 2011 +0200
+++ b/data/levels/level1.json	Sun Apr 03 16:33:27 2011 +0200
@@ -1,8 +1,67 @@
 {
+    "background": "dummy.png",
     "tileset": "dummy",
     "tiles": [
-        "..........",
-        "..XX--XX..",
-        ".........."
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXX--------------------------------------------------------------XXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXX--------------------------------------------------------------XXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXX--------------------------------------------------------------XXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXX--------------------------------------------------------------XXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        "..........................................................................",
+        "..XXXX--------------------------------------------------------------XXXX..",
+        "..........................................................................",
+        "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+        ".........................................................................."
     ]
 }
\ No newline at end of file
--- a/skaapsteker/__main__.py	Sun Apr 03 16:01:30 2011 +0200
+++ b/skaapsteker/__main__.py	Sun Apr 03 16:33:27 2011 +0200
@@ -24,11 +24,6 @@
     return opts
 
 
-def draw_level(leveldef, display):
-    import level
-    level.Level(leveldef).draw(display)
-
-
 def main():
     """Launch Nine Tales.
        """
@@ -51,9 +46,6 @@
     #    data.filepath('icons/nine_tales24x24.png')))
     pygame.display.set_caption("Nine Tales")
 
-    draw_level('level1.json', display)
-    pygame.display.flip()
-
     engine = Engine()
     try:
         engine.run()
--- a/skaapsteker/level.py	Sun Apr 03 16:01:30 2011 +0200
+++ b/skaapsteker/level.py	Sun Apr 03 16:33:27 2011 +0200
@@ -1,5 +1,7 @@
 import json
 
+from pygame import Rect, Surface, constants
+
 import data
 
 
@@ -36,21 +38,54 @@
 class Level(object):
     def __init__(self, leveldef):
         self.level_data = json.loads(data.load('levels/' + leveldef).read())
-        self.tileset = TileSet(self.level_data['tileset'])
+        self.build_background()
         self.build_tiles()
 
 
+    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_tiles(self):
+        self.tileset = TileSet(self.level_data['tileset'])
         self.tiles = []
         for row in self.level_data['tiles']:
             self.tiles.append([self.tileset.get_tile(char) for char in row])
+        self.level_size = (len(self.tiles[0]) * TILE_SIZE[0], len(self.tiles) * TILE_SIZE[1])
+        print "level:", self.level_size
 
 
     def tile_pos(self, x, y):
         return (x * TILE_SIZE[0], y * TILE_SIZE[1])
 
 
-    def draw(self, surface):
+    def get_backgound_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.level_size[0] - display_size[0]
+        lev_scalable_y = self.level_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 draw_background(self, surface, pos):
+        bg_pos = self.get_backgound_pos(pos, surface.get_size())
+        surface.blit(self.background.subsurface(Rect(bg_pos, surface.get_size())), (0, 0))
+
+
+    def draw_tiles(self, surface, pos):
+        whole_level = Surface(self.level_size, flags=constants.SRCALPHA)
         for y, row in enumerate(self.tiles):
             for x, tile in enumerate(row):
-                surface.blit(tile.image, self.tile_pos(x, y))
+                whole_level.blit(tile.image, self.tile_pos(x, y))
+        surface.blit(whole_level.subsurface(Rect(pos, surface.get_size())), (0, 0))
+
+
+    def draw(self, surface, pos):
+        self.draw_background(surface, pos)
+        self.draw_tiles(surface, pos)
+
+