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