Mercurial > projects > myrrdin
view src/tilemap.d @ 3:a9af6ec19195
working map and tileset loading
author | fred@reichbier.de |
---|---|
date | Thu, 17 Jul 2008 21:34:53 +0200 |
parents | f193d0c14685 |
children | 292df259cc85 |
line wrap: on
line source
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][int] map; // Layer: x: y: Tile-ID public Vector2i[int] layer_tsizes; // Layer: Tile size 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; } Vector2i real_to_tile(int layer, int real_x, int real_y) { return Vector2i(rndint(floor(real_x / this.layer_tsizes[layer].x)), rndint(floor(real_y / this.layer_tsizes[layer].y))); } Vector2i tile_to_real(int layer, int tile_x, int tile_y) { return Vector2i(tile_x*this.layer_tsizes[layer].x, tile_y*this.layer_tsizes[layer].y); } SpriteArray get_sprites() { SpriteArray sprites; Sprite sprite; int layer_id=0; Vector2i pos; 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; pos = tile_to_real(layer_id, x, y); sprite.setX(pos.x); sprite.setY(pos.y); sprite.setImage(this.tileset.tiles[layer[x][y]]); sprites ~= sprite; } } } } layer_id++; } return sprites; } }