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