diff src/tilemap.d @ 0:a2d653eb9e99

first working version.
author fred@reichbier.de
date Thu, 17 Jul 2008 18:52:55 +0200
parents
children f193d0c14685
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tilemap.d	Thu Jul 17 18:52:55 2008 +0200
@@ -0,0 +1,56 @@
+module tilemap;
+
+import tango.math.Math;
+
+import dsfml.window.all;
+import dsfml.system.all;
+import dsfml.graphics.all;
+
+import tileset;
+
+typedef Sprite[] SpriteArray;
+
+class Tilemap {
+    public int[int][int] map;
+    private Tileset tileset;
+    public int width, height, tilewidth, tileheight;
+
+    this(Tileset tileset, int width, int height, int tilewidth, int tileheight) {
+	this.tileset = tileset;
+	this.width = width;
+	this.height = height;
+	this.tilewidth = tilewidth;
+	this.tileheight = tileheight;
+    }
+
+    void real_to_tile(int real_x, int real_y, inout int tile_x, inout int tile_y) {
+	tile_x = rndint(floor(real_x / this.tilewidth));
+	tile_y = rndint(floor(real_y / this.tileheight));
+    }
+
+    void tile_to_real(int tile_x, int tile_y, inout int real_x, inout int real_y) {
+	real_x = tile_x*this.tilewidth;
+	real_y = tile_y*this.tileheight;
+    }
+
+    SpriteArray get_sprites() {
+	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;
+		    }
+		}
+	    }
+	}
+	return sprites;	
+    }
+}