comparison 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
comparison
equal deleted inserted replaced
2:fc2f936a961c 3:a9af6ec19195
10 10
11 typedef Sprite[] SpriteArray; 11 typedef Sprite[] SpriteArray;
12 12
13 class Tilemap { 13 class Tilemap {
14 public int[int][int][int] map; // Layer: x: y: Tile-ID 14 public int[int][int][int] map; // Layer: x: y: Tile-ID
15 public Vector2i[int] layer_tsizes; // Layer: Tile size
15 private Tileset tileset; 16 private Tileset tileset;
16 public int width, height, tilewidth, tileheight; 17 public int width, height, tilewidth, tileheight;
17 18
18 this(Tileset tileset, int width, int height, int tilewidth, int tileheight) { 19 this(Tileset tileset, int width, int height, int tilewidth, int tileheight) {
19 this.tileset = tileset; 20 this.tileset = tileset;
21 this.height = height; 22 this.height = height;
22 this.tilewidth = tilewidth; 23 this.tilewidth = tilewidth;
23 this.tileheight = tileheight; 24 this.tileheight = tileheight;
24 } 25 }
25 26
26 void real_to_tile(int real_x, int real_y, inout int tile_x, inout int tile_y) { 27 Vector2i real_to_tile(int layer, int real_x, int real_y) {
27 tile_x = rndint(floor(real_x / this.tilewidth)); 28 return Vector2i(rndint(floor(real_x / this.layer_tsizes[layer].x)), rndint(floor(real_y / this.layer_tsizes[layer].y)));
28 tile_y = rndint(floor(real_y / this.tileheight));
29 } 29 }
30 30
31 void tile_to_real(int tile_x, int tile_y, inout int real_x, inout int real_y) { 31 Vector2i tile_to_real(int layer, int tile_x, int tile_y) {
32 real_x = tile_x*this.tilewidth; 32 return Vector2i(tile_x*this.layer_tsizes[layer].x, tile_y*this.layer_tsizes[layer].y);
33 real_y = tile_y*this.tileheight;
34 } 33 }
35 34
36 SpriteArray get_sprites() { 35 SpriteArray get_sprites() {
37 SpriteArray sprites; 36 SpriteArray sprites;
38 Sprite sprite; 37 Sprite sprite;
39 int real_x, real_y; 38 int layer_id=0;
39 Vector2i pos;
40 foreach(int[int][int] layer; map) { 40 foreach(int[int][int] layer; map) {
41 for(int x=0; x<width; x++) { 41 for(int x=0; x<width; x++) {
42 if(x in layer) { 42 if(x in layer) {
43 for(int y=0; y<height; y++) { 43 for(int y=0; y<height; y++) {
44 if(y in layer[x]) { 44 if(y in layer[x]) {
45 sprite = new Sprite; 45 sprite = new Sprite;
46 tile_to_real(x, y, real_x, real_y); 46 pos = tile_to_real(layer_id, x, y);
47 sprite.setX(real_x); 47 sprite.setX(pos.x);
48 sprite.setY(real_y); 48 sprite.setY(pos.y);
49 sprite.setImage(this.tileset.tiles[layer[x][y]]); 49 sprite.setImage(this.tileset.tiles[layer[x][y]]);
50 sprites ~= sprite; 50 sprites ~= sprite;
51 } 51 }
52 } 52 }
53 } 53 }
54 } 54 }
55 layer_id++;
55 } 56 }
56 return sprites; 57 return sprites;
57 } 58 }
58 } 59 }