changeset 1:f193d0c14685

layer support
author fred@reichbier.de
date Thu, 17 Jul 2008 20:19:24 +0200
parents a2d653eb9e99
children fc2f936a961c
files src/test.d src/tilemap.d
diffstat 2 files changed, 21 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/test.d	Thu Jul 17 18:52:55 2008 +0200
+++ b/src/test.d	Thu Jul 17 20:19:24 2008 +0200
@@ -10,15 +10,22 @@
 import imagecache;
 import tilemap;
 import tileset;
+import xmlmap;
+import tools;
 
 int main(char[][] args) {
+//    Tilemap map = parse_map(read_file_contents("map-example.xml"));
     Cache cache = new Cache("gfx");
     Tileset tileset = new Tileset(cache);
     Tilemap map = new Tilemap(tileset, 5, 5, 32, 32);
     tileset.add_tile(0, "grass.png");
+    tileset.add_tile(1, "grass-stone-water-east.png");
     for(int x=0; x < 5; x++) {
-	map.map[x][x] = 0;
+	for(int y=0; y < 5; y++) {
+	    map.map[0][x][y] = 0;
+	}
     }
+    map.map[1][1][1] = 1;
 
     Renderer render = new Renderer("Blubb", 600, 480, 32);
     TileConsumer consumer = new TileConsumer(render, map);
--- a/src/tilemap.d	Thu Jul 17 18:52:55 2008 +0200
+++ b/src/tilemap.d	Thu Jul 17 20:19:24 2008 +0200
@@ -11,7 +11,7 @@
 typedef Sprite[] SpriteArray;
 
 class Tilemap {
-    public int[int][int] map;
+    public int[int][int][int] map; // Layer: x: y: Tile-ID
     private Tileset tileset;
     public int width, height, tilewidth, tileheight;
 
@@ -37,16 +37,18 @@
 	SpriteArray sprites;
 	Sprite sprite;
 	int real_x, real_y;
-	for(int x=0; x<width; x++) {
-	    if(x in this.map) {
-		for(int y=0; y<height; y++) {
-		    if(y in this.map[x]) {
-			sprite = new Sprite;
-			tile_to_real(x, y, real_x, real_y);
-			sprite.setX(real_x);
-			sprite.setY(real_y);
-			sprite.setImage(this.tileset.tiles[this.map[x][y]]);
-			sprites ~= sprite;
+	foreach(int[int][int] layer; map) {
+	    for(int x=0; x<width; x++) {
+		if(x in layer) {
+		    for(int y=0; y<height; y++) {
+			if(y in layer[x]) {
+			    sprite = new Sprite;
+			    tile_to_real(x, y, real_x, real_y);
+			    sprite.setX(real_x);
+			    sprite.setY(real_y);
+			    sprite.setImage(this.tileset.tiles[layer[x][y]]);
+			    sprites ~= sprite;
+			}
 		    }
 		}
 	    }