Mercurial > projects > myrrdin
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; + } +}